Kafka的工作原理

news2024/11/20 11:35:12

一、Kafka是什么?

Kafka是一个分布式的基于发布/订阅模式的消息队列。分布式消息队列可以看成是将这种先进先出的数据结构独立部署在服务器上,应用程序可以通过远程访问接口使用它。

二、Kafka的工作机制是什么?

1.基本概念

 

 

2.消息模型

发布订阅模式:一对多,消费者消费数据之后不会清除消息

一次消息写入多次消费,当然前提是消费者位于不同的消费者组。
 

3.存储机制

Kafka的消息是存储在磁盘的,所以数据不易丢失。

 

 4.生产流程

1)主线程首先将业务数据封装成ProducerRecord对象

2)调用send方法将消息放入消息收集器RecordAccumlator中暂存

3)Sender线程将消息信息构成请求

4)执行网络IO的线程从RecordAccumlator中将消息取出并批量发送出去

 5.消费流程

Kafka消费者从属于消费者组。消费者组内的消费者订阅的是相同主题,每个消费者接收主题的一部分分区的消息。

 

三、Kafka常见面试题

1.Kafka的多分区多副本机制有什么好处?

 1)Kafka通过将特定topic指定到多个partition,各个partition分布到不同的Broker上,这样能够提供比较好的并发能力。

2)Partition可以指定对应的replica数,这也极大地提高了消息存储的安全性和容灾能力。

2.Kafka如何实现高效读写?

1)顺序写入磁盘:在日志文件尾部追加,顺序写入且不允许修改。

2)页缓存:每次从磁盘中加载一页的数据到内存中这样可以减少IO次数。

3)零拷贝技术:只用将磁盘中的数据复制到页面缓存中一次,然后将数据从页面缓存中发送到网络中,避免了重复复制操作。

常规数据交互模式:

 零CPU拷贝模式:

splice系统调用可以在内核缓冲区和socket缓冲区之间建立管道来传输数据,避免了两者之间的CPU拷贝操作。

 

 3.为什么消费者用pull模式从broker中读取数据?

 pull模式可以根据消费者的能力以适当的消费速率消费消息,避免造成网络拥塞。pull模式的不足之处在于,如果kafka没有数据,消费者会陷入空循环中,针对这一点,Kafka的消费者会在消费时传入timeout参数,如果当前Kafka中没有数据,消费者会等待一个timeout时长再返回。

4.Kafka如何保证消息的顺序消费呢?

1)当partition只有一个时可以做到全局有序,Kafka只能保证分区内部消息消费的有序性。

2)在发送消息时指定key和postion,从而可以保证间隔有序。

5.Kafka如何保证消息不丢失?

1)生产者确认

topic的每个partition收到producer发送的数据后,都需要向producer发送ack,如果producer收到ack,就会进行下一轮发送,否则重新发送数据。

Leader维护了一个动态的ISR(in-sync replica),它是一个保持同步的follower集合。当ISR中的follower完成数据的同步之后,leader就会给follower发送一个ack。如果follower长时间未从leader同步数据,则该follower将被踢出ISR,该时间由阈值replica.lag.max.ms参数设定。Leader发生故障后,ISR将会重新选举新的Leader。

Kafka为用户提供了三种可靠性级别,用户可根据对可靠性和延迟的要求权衡。

ack=0,生产者在成功写入消息之前不会等待任何来自服务器的响应,如果出现问题生产者感知不到,但能够以网络支持的最大速度发送消息。

ack=1,默认值,只要集群的首领节点leader收到消息,生产者就会收到一个来自服务器的成功响应。如果消息无法到达首领节点,生产者会收到一个错误响应,为了避免数据丢失,生产者将重发消息。如果收到写成功通知,但首领节点还没来的及同步follower节点就崩溃了,也会造成数据丢失。

ack=-1,只有当所有所有参与复制的节点收到消息后,生产者会收到一个来自服务器的成功确认。如果在follower同步完成之后,broker返回ack之前,leader发生故障,那么会造成数据重复。

2)消费者确认

一次poll会拉取一批消息,对应的消费位移是一个区间,如果是拉取信息之后进行位移提交,在消费中间中间发生了故障,会造成消息丢失现象。如果是消费完成之后进行位移提交,在消费中间发生了故障,会造成重复消费现象。

将位移提交方式改为手动提交,即每次消费完成之后提交,可以避免因为消费未完成出现异常导致的消息丢失。

6.Kafka如何保证消息不重复消费?

自动提交offset,在下一次提交位移之前消费者崩溃了,那么又会从上一次位移提交的地方重新开始消费,这样便造成了重复消费。

使用异步提交方式,此时可以设置一个递增的序号来维护异步提交的顺序,每次位移提交之后就增加对应的序号值。在遇到位移提交失败需要重试的时候,可以检查所需要提交的位移和序号值的大小,如果前者的值大于后者,则说明有更大的位移已经提交了,不需要进行本次重试;如果前者等于后者,则进行重试。除非编码错误,否则不会出现前者大于后者的情况。

7.broker宕机后如何保证副本间数据的一致性?

 1)follower发生故障后,会被临时踢出ISR,待该follower恢复后,follower会读取本地磁盘记录的HW,并将log文件高于HW的部分截取掉,从HW开始向leader进行同步,等该follower大于partition的HW时,即follower追上leader时,就可以重新加入ISR了。

2)leader发生故障后,会从ISR重新选举一个新的leader,为了保证多个副本之间数据的一致性,所有follower会先将各自的log文件高于HW的部分截取掉,重新从新的leader同步数据。

注意,这只能保证副本之间数据的一致性,不能保证数据不丢失或者不重复。

8.Zookeeper在kafka中的作用?

Broker注册:在Zookeeper上有个专门记录broker服务器列表的节点,每个broker启动时,都会在/brokers/ids下创建属于自己的节点,每个broker会将自己的IP地址和端口信息记录到节点上去。

Topic注册:同一个topic的消息会被分成多个分区并分布在多个broker上,这些分区和broker的对应关系也都是Zookeeper在维护,对应到Zookeeper中可能会创建文件/brokers/topics/my-topic/partitions/0,/brokers/topics/my-topic/partitions/1。

负载均衡:为了提供更好的并发能力,Kafka会尽力将同一个topic的partition分布到不同的broker,当Consumer消费的时候,Zookeeper可以根据当前的partition数量和Consumer数量进行动态负载均衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/541145.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WiFi基础学习到实战(六:Beacon帧字段解析)

欢迎大家一起学习探讨通信之WLAN。上节我们基于Android设备分析了WiFi扫描的代码实现,具体执行WiFi网络扫描由WiFi模块实现。WLAN协议定义扫描方式有“被动扫描”和“主动扫描”。本节继续分析“被动扫描”依赖Beacon帧中的字段。 好。我们先来看Android11 WiFi扫描…

会计转行数据分析,可行性多高?

看到这样的问题,第一个想法是想劝退,毕竟通过不明真相的网友身上找自己的未来,这件事听着就不靠谱。转行难,转行做好更好,虽然会计也与数据有关,但是数据分析涉及的技术内容明显有很大的差别。所以&#xf…

重塑职业未来:在竞争激烈的职场上脱颖而出的关键策略

在竞争激烈的职场上,各种职场难题时常出现,如何进行有效沟通、如何应对工作压力、如何提升职业能力等,这都是需要去克服的问题。下面分享一下职场老人的经验! 一、你遇到过哪些职场问题?分享一下你是怎么解决的呢&…

Type-C边充电边OTG转接器方案

随着生活水平的提高,大家的电子设备也多了起来,更有甚者会凑齐“全家桶”,手机,平板,笔记本电脑,智能手表,无线耳机,Switch,PS5,一样不落。那么多的电子设备&…

hibernate入门项目(一)

本节我们将演示如何搭建一个 Hibernate 工程。 搭建 Hibernate 工程需要以下 7 步: 下载 Hibernate 开发包 新建工程 创建数据库表 创建实体类 创建映射文件 创建 Hibernate 核心配置文件 测试 1. 下载 Hibernate 开发包 浏览器访问 Hibernate 官网 下载 Hibern…

520告白日!小红书关键词热度查询,今年的心动密码是什么?

520,又是一个有爱的日子,人们借机表达爱意的日子,品牌不会错过的好时机。今年520什么东西比较热呢?消费者比较关注什么?品牌有什么样动作?下面,借助小红书关键词热度查询、热词排行榜&#xff0…

基于C3D卷积神经网路的动作识别

对于基于视频分析的问题,2D卷积(卷积核为二维)不能很好得捕获时序上的信息,因此《3D convolutional neural networks for human action recognition》 这片论文提出了3D卷积并用于行为识别的,论文中将其用于行为识别&a…

商家中心之java商城 开源java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

cpp test

1. 以下程序在linux 64位系统的输出结果&#xff08; &#xff09; #include <stdio.h> int main(void) {int buf[100] { 0 };printf("%d,%d,%d,%d,%d",sizeof(int), sizeof(long long), sizeof(buf),sizeof(buf)/sizeof(buf[0]), sizeof(&buf));retur…

【Linux Network】网络层协议——IP

目录 网络层 IP协议 基本概念 协议头格式 网段划分 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 路由表生成算法 Linux网络编程&#x1f337; 网络层 在复杂的网络环境中确定一个合适的路径&#xff1b; IP协议 基本概念 主机 : 配有 IP 地址 , 但是不进行路…

前端必学,crud,magic-Api

CRUD还要后端写&#xff1f; 前端自己搞定&#xff0c;只需要会写sql就行。 文档写的比我写的好太多&#xff0c;直接看文档 创建springBoot&#xff08;springBoot版本要小于3.0&#xff09; 引入pom <?xml version"1.0" encoding"UTF-8"?> &…

接口自动化——har 生成用例

这里写目录标题 一、目标二、应用场景三、Har 简介四、实现思路五、模板技术六、模版技术-环境安装&#xff08;Python&#xff09;七、har 生成用例实现思路1、python模板模板文件生成的测试文件 2、java模板模板文件生成的测试文件 3、httprunner模板模板文件生成的测试文件 …

数据库界的科技与狠活: 创邻科技Galaxybase X英特尔SGX数据加密解决方案正式发布

引言 近日&#xff0c;创邻科技入选与英特尔合作&#xff0c;在基于第四代英特尔至强处理器的支持下&#xff0c;利用软件防护扩展&#xff08;Software Guard Extension,SGX&#xff09; 技术&#xff0c;打造出了具备可信执行环境的图数据库产品&#xff0c;保护企业释放关联…

STM32单片机多功能电子秤点数秤食物热量卡路里称重

实践制作DIY- GC0132-多功能电子秤 一、功能说明&#xff1a; 基于STM32单片机设计-多功能电子秤 二、功能介绍&#xff1a; STM32F103C系列最小系统lcd1602HX7115Kg电子秤去皮键模式选择按键重量设置键上键下键 有3种模式普通模式、点数模式、卡路里模式。通过模式选…

Requests-get方法的使用

Requests-get方法使用 打开网页使用代码获取页面内容查看结果页面格式修改 爬取书名完整代码以及注释代码注释 翻页查询所有 以https://books.toscrape.com/网站为例&#xff1a; 打开网页 先把网页打开&#xff0c;然后右键检查&#xff0c;找到网络一栏&#xff0c;这个时候…

【Android】【Java】【每日练手1】字符串的二维码生成器

文章目录 一、需求二、创建android stdio工程三、设置好JDK四、创建activity五、编写activity_main.xml布局六、build.gradle增加zxing依赖七、MainActivity 一、需求 一个界面&#xff0c;界面上一个文本输入框、一个按钮、一个二维码显示view。可在文本输入框输入字符串&…

为什么分布函数的概率分布为均匀分布?

为什么分布函数的概率分布为均匀分布&#xff1f; 我先来解决这样一个常见的问题&#xff1a;已知随机变量X的概率分布&#xff0c;求Yg(X)的概率分布&#xff08;分布律或者概率密度函数&#xff09; 这种问题有三种类型&#xff08;如下图&#xff09; 我们以随机变量X为连续…

计算机技术是最容易引发第四次工业革命的方向吗? - 易智编译EaseEditing

计算机技术是当前推动第四次工业革命的关键方向之一&#xff0c;但并非是唯一的方向。 第四次工业革命是在信息技术、人工智能、物联网、生物技术等多个领域的交叉融合下发生的一次全球性变革。 计算机技术在其中发挥了重要的作用&#xff0c;但还需要与其他技术领域相互配合和…

【C++】C/C++内存管理,从底层汇编带你理解new和delete!

c内存管理 C/C内存分布C语言中动态内存管理的方式C动态内存管理new/delete操作内置类型new和delete操作自定义类型 operator new与operator delete函数new和delete的实现原理内置类型自定义类型 定位new表达式(placement-new)常见面试题malloc/free和new/delete的区别 &#x1…

【详解LinkedList与链表】

&#x1f320;作者&#xff1a;TheMythWS. &#x1f386;专栏&#xff1a;《集合与数据结构》 &#x1f387;座右铭&#xff1a;不走心的努力都是在敷衍自己&#xff0c;让自己所做的选择&#xff0c;熠熠发光。 目录 链表 概念 图解链表 链表的实现 1.创建链表 2.遍历链…