首页 > 其他分享 >kafka详解

kafka详解

时间:2024-12-15 23:32:43浏览次数:3  
标签:消费者 分区 kafka 详解 消息 拷贝 数据

kafka详解

一、简介

kafka是一个高吞吐的分布式消息系统,生产者生产数据,消费者消费数据。

二、基本架构

image-20241215225731485

kafka是一个去中心化的架构,元数据存储在zookeeper中,数据存在硬盘上。

producer:消息生存者
consumer:消息消费者
broker:kafka集群的server,负责处理消息读、写请求,存储消息
topic:topic就相当于queue,消息队列/分类

一个topic就是一个表,一个分区对应一个文件,一个broker对应一个节点,可以管理topic的多个分区,生产者往broker追加写数据,消费者从broker拉取数据,数据默认存7天,实现容错性

三、基本概念

  • 消息:Kafka 中的基本数据单元,由键(key)、值(value)和时间戳等组成。消息可以是任何类型的数据,如文本、JSON、二进制等。

  • 主题:消息的分类或类别,类似于数据库中的表。生产者将消息发送到特定的主题,消费者从主题中订阅并接收消息。

  • 分区:为了实现分布式和高吞吐量,每个主题可以分为多个分区。分区是有序的、不可变的消息序列,每个分区每个副本在物理上对应一个文件夹,存储该分区的所有消息。

  • 生产者:负责向 Kafka 集群发送消息的客户端应用程序。生产者可以将消息发送到指定的主题和分区,并可以选择同步或异步发送。

  • 消费者:从 Kafka 集群中订阅并接收消息的客户端应用程序。消费者可以以组的形式进行消费,同一个组内的消费者共同消费一个主题的所有分区,实现负载均衡和容错。

  • 消费者组:多个消费者组成的一个逻辑分组,共同消费一个或多个主题的消息。消费者组内的消费者可以动态加入或离开,Kafka 会自动进行负载均衡和消息分配。

    四、kafka特点

    (1)缓存减压

    (2)分布式:保证数据不丢失

    (3)持久化,数据持久化在磁盘中

    (4)生产者消费者模型

    (5)高吞吐量,能够处理大量的消息,支持每秒数百万条消息的生产和消费。

    (6)实时性,能够实时处理消息,支持流处理和实时分析。

    五、kafka性能好的原因

    (1)kafka写磁盘是顺序的,所以不断的往前产生,不断的往后写

    (2)kafka还用了sendFile的0拷贝技术,避免了数据在用户空间和内存空间之间的拷贝,提高速度

    (3)用到了批量读写,一批批往里写,如64K为单位

    六、零拷贝和非零拷贝

    非零拷贝:我们看到“零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送文件时,不需要将文件内容拷贝到用户空间(User Space)而直接在内核空间(Kernel Space)中传输到网络的方式。

    image-20241215225459149

    零拷贝:Zero Copy的模式中,避免了数据在用户空间和内存空间之间的拷贝,从而提高了系统的整体性能。

    image-20241215225416171

    七、kafka的消息存储和生产消费模型

    image-20241215230044646

    (1)一个topic分成多个partition
    (2)每个partition内部消息强有序,其中的每个消息都有一个序号叫offset
    (3)一个partition只对应一个broker,一个broker可以管多个partition
    (4)消息不经过内存缓冲,直接写入文件,根据时间策略删除,而不是消费完就删除
    (5)producer自己决定往哪个partition写消息,可以是(默认)轮询的负载均衡(分布式,一条一条写),或者是基于hash的partition策略(可能数据倾斜)

八、kafka如何保证数据不丢失

(1)副本机制,在正常情况下,只要数据保存成功之后就肯定不会丢失,尽管没有副本也没影响

(2)在有副本的情况下,比如往某一个副本写数据任务失败或者某个节点挂掉了,通过acks 参数设置,在生产者生产数据时,等待所有同步副本(ISR)都成功接收并写入消息后,才收到确认,并继续生产以确保数据不丢失。

九、kafka使用场景

  • 日志收集:收集各种系统和应用的日志数据,统一存储和管理,方便后续的查询和分析。
  • 消息队列:作为消息队列系统,实现应用程序之间的异步通信和解耦,提高系统的可扩展性和可靠性。
  • 实时流处理:对实时产生的消息进行处理和分析,如实时监控、实时推荐、实时报警等。
  • 数据集成:在不同的系统和数据源之间进行数据集成和传输,实现数据的共享和交换。

标签:消费者,分区,kafka,详解,消息,拷贝,数据
From: https://www.cnblogs.com/zhuzhuya/p/18608896

相关文章

  • burpsuite,Decoder comparer logger模块使用详解
    公众号:泷羽Sec-尘宇安全声明!学习视频来自B站up主泷羽sec有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击......
  • 深度Q网络(Deep Q-Network, DQN)详解
    ✅作者简介:2022年博客新星第八。热爱国学的Java后端开发者,修心和技术同步精进。......
  • 使用YOLOv4训练DeepFashion2数据集详解
    文章目录使用YOLOv4训练DeepFashion2数据集详解一、引言二、准备工作1、数据集和代码准备2、环境配置三、数据预处理1、生成训练和验证集标签2、调整数据集路径四、模型训练1、修改配置文件2、开始训练五、使用示例六、总结使用YOLOv4训练DeepFashion2数据集详解......
  • MyBatis详解---关联映射
    目录引入一、创建表结构1.学生表2.老师表二、查询学生对应的老师1.第一种形式连表查询 ①:设置实体类②:查询语句2.第二种形式分步查询(分段查询--支持懒加载)①:设置实体类②:查询语句三、查询教师的学生(一对多)1.第一种形式:按照结果嵌套处理 ①.设置实体类②......
  • Kubernetes Service 详解:如何轻松管理集群中的服务
    KubernetesService详解:如何轻松管理集群中的服务在Kubernetes中,Service是一个非常核心的概念。它解决了容器之间的通信问题,确保了无论容器如何启动或销毁,服务都能保持稳定的访问方式。今天,我想通过一篇简单易懂的文章,带大家一起探讨一下Kubernetes中的Service,它的作用......
  • 微信native支付对接案例详解
    微信native支付对接案例详解效果展示native支付产品介绍接入前准备开发指引API列表支付通知开发者社区整体原则就是按照官方文档一步一步来支付产品微信认证注意:只有服务号才能对接微信支付。每年都需要花300块认证费用。......
  • OJ题目详解——1.8~05:计算鞍点
    描述给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8)。11356912478101056911864721510112025......
  • OJ题目详解——1.8~06:图像相似度
    描述给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。输入第一行包含两个整数m和n,表示图像的行数和列数,中间用单个空格......
  • OJ题目详解——1.8~11:图像旋转
    描述输入一个n行m列的黑白图像,将它顺时针旋转90度后输出。输入第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1<=n<=100,1<=m<=100。接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之间。输出m行,每行......
  • OJ题目详解——1.8~14:扫雷游戏地雷数计算
    描述扫雷游戏是一款十分经典的单机小游戏。它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里是否是地雷。现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷数。注:每个格子周围格有八个:上、下、左、右、左上、右上、左下、右下。输入......