Kafka经典面试题

1、kafka消息发送的流程?

 
 

producer发送过程中启动两个线程 一个main线程 一个sender线程,在main线程中先创建一个双端队列(RecordAccumlator、producerbatch),main将我们需要发送的东西经过拦截器,序列化,分区器,发送到双端队列中(双端队列中的内存默认为32m 可以在配置中修改),sender线程不断的从双端队列中拉取消息,等待达到batch.size的值后(默认16k),发送消息到kafka集群,如果一直达不到batch.size的值,就等待达到linger.ms值的时间后发送数据,返回一个InflightRequests请求(可通过配置文件修改1-5),意思就是发送5条消息,kafka集群收到消息后,会进行acks应答,如果kafka集群中的消息同步成功,返回成功的应答信息,sender中清理掉成功发送的消息,如果发送失败sender就会重试(retries)重新发送

2、Kafka 的设计架构你知道吗?

 

Kafka 将消息以 topic 为单位进行归纳(存储在了zk中,可选择),发布消息的程序称为 Producer,消费消息的程序称为 Consumer。它是以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个 Broker,Producer 通过网络将消息推送到 kafka 集群,消费者从集群中拉取数据,broker 在中间起到一个代理保存消息的中转站,broker中还有可以通过分区提高数据的并行度等,broker还有着leader以及follower的高可用机制,即使有服务器挂掉,其他的依旧可以顶上保证kafka的正常运行

3、Kafka 分区的目的?

1)提高并行度: 以分区为单位进行消息的发送与消费

2)有利于更加合理的储存资源: 当数据在broker中存储的的时候,分区可以将大量的数据切成一块一块的,存储资源更加合理。而且合理的控制分区的数量,还可以实现负载均衡的效果

4、你知道 Kafka 是如何做到消息的有序性?

 

生产者发送的数据,单分区内可以做到有序,多分区,无法保证,除非把多个分区的数据拉到消费者端,进行排序,但这样做需要等,效率很低,还不如直接设置一个分区。

5、ISR、OSR、AR 是什么?

 

isr:isr中只显示活着的follower与leader的broker id

osr:表示 Follower 与 Leader 副本同步时,连接不到的副本id

AR:kafka分区中所有副本的id都会在AR中显示

AR = isr + osr

6、Kafka 在什么情况下会出现消息丢失

 

1)acks的级别设置为 0 的时候,此时producer发送消息后,不需要等待应答就结束了,很容易造成数据丢失

2)acks的级别设置为 1 的时候,此时producer发送消息后,Leader收到消息后应答(不等待follower同步数据),应答完成后,producer就认为消息发送成功,这时follower中并没有同步数据,一但此时leader挂了,通过选举机制产生的新leader中不会收到之前收到的消息,因为producer得到了应答,认为当时的消息已经发送成功了,此时数据就丢失了

3)acks的级别设置为 -1(all) 的时候,虽然此时等待producer发送消息后,leader和follower都同步消息后,才会应答给producer,数据就不容易丢失,可靠性高,但是效率较低 但是,当acks=-1的时候也会有些问题,当leader收到消息后,所有的follower都开始同步消息,但是如果此时某个follower出现问题,同步不到消息,也会造成数据丢失

7、怎么尽可能保证 Kafka 的可靠性

 

将acks的级别设置为-1 + 分区数大于等于2 + isr中可应答(活着的)副本数大于等于2,这样做只能保证数据不丢失,但是不确保数据不会重复,所以还需要引入幂等性和事务(保证数据唯一)这样,数据就一定可靠了,即保证数据不丢,又保证数据不重复

8、Kafka中如何做到数据唯一,即数据去重?

 

利用幂等性 + 事务 幂等性虽然能做到去重,但是只能保证单分区内数据不重复,且服务器不挂掉的情况下,所以我们还需要使用事务来保证数据的唯一 开启参数 enable.idempotence 默认为 true,false 关闭。 幂等性:生产者不论给broker中发送了多少条消息,broker中只会持久化一条

9、生产者如何提高吞吐量?

 

修改生产者重要参数的值

1、batch.size:批次大小,默认16k

2、linger.ms:等待时间,修改为5-100ms

3、compression.type:压缩snappy

4、 RecordAccumulator:缓冲区大小,修改为64m

10、zk在kafka集群中有何作用

 

kafka中的消息都是存储到了zk上的

Kafka 的各 Broker 在启动时都要在Zookeeper上注册,由Zookeeper统一协调管理。如果任何节点失败,可通过Zookeeper从先前提交的偏移量中恢复,因为它会做周期性提交偏移量工作。同一个Topic的消息会被分成多个分区并将其分布在多个Broker上,这些分区信息及与Broker的对应关系也是Zookeeper在维护。

在安装kafka的时候,修改了server.properties配置文件,在zk连接的位置写入了/kafka,加入没有写这个的话,kafka的消息就会存储到zk的根节点下

11、简述kafka集群中的Leader选举机制

 

当Leader挂了的时候,在isr中存活、AR中最靠前follower会通过选举机制成为新的Leader

12、kafka是如何处理数据乱序问题的。

 

通过幂等性,幂等性不但可以去重,还有排序的功能 幂等性:生产者不论给broker中发送了多少条消息,broker中只会持久化一条

13、kafka中节点如何服役和退役

 

前提:如果想要加入新的服役节点,需要在/etc/hosts中配置新的broker的节点ip以及hostname

服役:创建一个json文件,里面写入新topic的id以及version:1,通过kafka-reassign-partitions.sh命令执行json文件, --broker-list副本写入需要服役broker的id --generate执行,执行后会产生一堆的json内容,复制到新的json文件中,再通过kafka-reassign-partitions.sh --reassignment-json-file 后面写新的json文件名 --execute 执行此计划

退役:和服役一样,不同点就在于-broker-list副本写入需要服役broker的id不同

14、Kafka中Leader挂了,Follower挂了,然后再启动,数据如何同步?

 

当Leader挂了的时候,在isr中存活、AR中最靠前follower会通过选举机制成为新的Leader(即使此前的Leader重启了,它也不会变成leader),这时其他follower中log文件高于HW的部分截取掉,再从新的Leader中同步

当follower挂了的时候,挂掉的follower会被踢出isr,其他的leader和follower继续同步数据,重启后,此follower会从上一次挂掉的节点,直接切掉后面的数据,重新从之前挂掉的节点开始同步数据

15、kafka中初始化的时候Leader选举有一定的规律,如何打破这个规律呢?

 

初始化后,ar中的顺序和isr中的是一样的

当有节点(比如是1)挂掉的时候,isr这个中这个副本数就会消失,isr中存活且ar中排名靠前的副本,将会成为新的leader,再次启动原来的leader,此时这个leader就会变成follower,顺序错乱

初始化时:

0分区中:ar中是【0,1,2】 isr中也是【0,1,2】 leader:0

1分区中:ar中是【1,2,0】 isr中也是【1,2,0】 leader:1

2分区中:ar中是【2,0,1】 isr中也是【2,0,1】 leader:2

节点(1)挂掉后:

0分区中:ar中是【0,1,2】 isr中也是【0,2】 leader:0

1分区中:ar中是【1,2,0】 isr中也是【2,0】 leader:2

2分区中:ar中是【2,0,1】 isr中也是【2,0】 leader:2

节点(1)再次重启后,顺序错乱

0分区中:ar中是【0,1,2】 isr中也是【0,2,1】 leader:0

1分区中:ar中是【1,2,0】 isr中也是【2,0,1】 leader:2

2分区中:ar中是【2,0,1】 isr中也是【2,0,1】 leader:2

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

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

相关文章

HTB:Photobomb[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行端口开放扫描 再次使用nmap对靶机开放端口进行脚本、服务扫描 使用ffuf进行简单的子域名扫描 使用浏览器直接访问该域名 选取一个照片进行下载,使用Yakit进行抓包 USER_FLAG:a9afd9220ae2b5731…

蓝桥杯c++算法学习【1】之枚举与模拟(卡片、回文日期、赢球票、既约分数:::非常典型的比刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵!!! 关注博主,更多蓝桥杯nice题目静待更新:) 枚举与模拟 一、卡片: 【问题描述】 小蓝有很多数字卡片,每张卡片上都是一个数字(0到9)。 小蓝…

html页面中的内容替换,或改变某些字的颜色

1. html页面中的内容替换,或改变某些字的颜色 前端使用innnerHtml显示返回值+innerHtml文字显示两种不同的颜色(两部分显示颜色不一样) 1.1. html字符串改变某些字的颜色 需求:要文本框的字体部分改变颜色、大小、换行等功能。在了解需求后,文本框input发现完全满足不了现需…

Linux——简单认识vim、gcc以及make/Makefile

前言:大佬写博客给别人看,菜鸟写博客给自己看,我是菜鸟。 1、vim操作: 默认打开vim时,vim处于命令模式。(在其他模式中,Esc就能够返回命令模式) 常用的命令有: n gg:跳转到n行&…

C++基础(12.红黑树实现)

目录 红黑树的概念: 红黑树规则: 红黑树如何确保最长路径不超过最短路径的2倍的? 红黑树的效率: 红黑树的插入: 红黑树树插入⼀个值的大概过程: 情况1:变色 情况2:单旋变色: 情况3&…

Spark 的容错机制:保障数据处理的稳定性与高效性

Spark 的介绍与搭建:从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 Spark on YARN:Spark集群模式…

Linux内核编程(二十)RTC子系统一驱动rx8010

本文目录 一、基础知识点1.什么是RTC?2. RTC方案3. 电路原理图 二、RTC芯片(RX8010)移植三、关于时间的一些命令四、应用层使用1. 使用RTC驱动2. 使用time.h库(额外知识点) 一、基础知识点 1.什么是RTC? R…

GESP4级考试语法知识(贪心算法(一))

海盗船代码&#xff1a; #include<iostream> #include<algorithm> using namespace std; int data[21]; int main() {int n;cin>>n;for(int i0;i<n;i)cin>>data[i];sort(data,datan);int temp0,sum0;for(int i0;i<n;i){tempdata[i];if(temp>…

036 RabbitMQ消息确认 死信队列 延时队列

文章目录 生产者确认模式application.propertiesMessageController.javaMessageConfirmRallback.java 生产者回退模式application.propertiesMessageConfirmRallback.javaMessageController.java 消费者手动确认application.propertiesConsumerAckQueueListener.java 死信队列延…

Unity 插件 - Project窗口资源大小显示

Unity 插件 - Project窗口资源大小显示 &#x1f354;功能&#x1f32d;安装 &#x1f354;功能 &#x1f4a1;.显示Project Assets 和Packages下所有文件的大小&#xff08;右侧显示&#xff09; &#x1f4a1;.统计选中文件夹及其子文件夹下所有文件的大小并显示&#xff08…

Maven 中央仓库地址 mvnrepository.com

下载一些 jar 包驱动&#xff0c;不需用去官网下了&#xff0c;直接去 Maven 中央仓库&#xff0c;高效、简单 Maven 中央仓库地址 https://mvnrepository.com/open-source 我们下期见&#xff0c;拜拜&#xff01;

制作自己的刷题小题库,提高刷题效率

日常刷题 乱序/背题多种模式 组队刷题 查看小组的刷题统计 在线考试 创建考试多人同时答题 ----这是一条分割线----- 土著刷题&#xff0c;是一款可以导入题库的在线刷题学习小&#x1f34a;序&#xff0c;提供一套以【搭建题库-组建小组-刷题练习-在线考试】为中心的完整服务…

WPF在MVVM模式下怎么实现导航功能

在mvvm的模式下wpf通过frame实现页面跳转_哔哩哔哩_bilibili 视频讲解同步可观看 如下图&#xff0c;我们要实现点击左侧的菜单&#xff0c;在右侧展示不同的页面 实现代码如下&#xff1a; 一、如何从主窗体跳转到页面。 1、在mainwindow.xaml的菜单栏代码里加入如下代码 …

VSCode中python插件安装后无法调试

问题 VSCode中python插件安装后无法调试&#xff0c;如下&#xff0c;点击调试&#xff0c;VScode中不报错&#xff0c;也没有调试 解决方法 1、查看配置 打开所在路径 2、拷贝 将整个文件夹拷贝到vscode默认路径下 3、问题解决 再次调试&#xff0c;可以正常使用了…

光模块基础知识

1. 光模块的封装 光模块是光收发模块的简称&#xff0c;主要根据不同的外型来区分&#xff0c;而在同一外型中&#xff0c;又有着多种规格&#xff1b;在数据通信领域&#xff0c;最常见的光模块&#xff08;根据外型区分&#xff09;分别是SFF、GBIC、SFP、和XFP、QSFP 、XEN…

【GPTs】MJ Prompt Creator:轻松生成创意Midjourney提示词

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;MJ Prompt Creator主要功能适用场景优点缺点 &#x1f4af; 小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 任务说明 您是一款为幻灯片工…

uniapp路由与页面跳转详解:API调用与Navigator组件实战

UniApp路由与页面跳转详解&#xff1a;API调用与Navigator组件实战 路由 uniapp页面路由为框架统一管理&#xff0c;开发者需要在page.json里面配置每个路由页面的路径及页面样式。 路由跳转 uniapp有两种页面路由跳转方式&#xff0c;调用API跳转和navigator组件跳转。 调…

机器学习 笔记

特征值提取 字典 from sklearn.extaction import DictVectorizer mDictVectorizer(sparseFalse)#sparse是否转换成三元组形式 data[], #传入字典数据 data1model.fit_transform(data) #使用API 英文特征值提取 from sklearn.feature_extraction.text import CountVe…

【智谱开放平台-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

如何搭建自动化测试框架

软件测试资料领取&#xff1a;[内部资源] 想拿年薪40W的软件测试人员&#xff0c;这份资料必须领取~ 软件测试面试刷题工具&#xff1a;软件测试面试刷题【800道面试题答案免费刷】 关于测试框架的好处&#xff0c;比如快速回归提高测试效率&#xff0c;提高测试覆盖率等这里…