Kafka面试题总结

article/2025/9/14 17:23:01

1、kafka是什么? 可以用来做什么?

Kafka 是一个分布式的、高吞吐量的、可持久性的、自动负载均衡的消息队列。

它不仅可以实现传统意义上MQ功能,异步解耦削峰

还可以作为大数据的流处理平台。

2、为什么kafka安装需要依赖Zookeeper?

  • 配置中心,管理Broker、Topic、Partition、Consumer的信息,包括数据的变动。
  • 负载均衡,Broker在ZK注册watch,从而感知Broker的上下线。
  • 集群管理和选举,选举产生Controller。

3、pull和push,kafka支持哪种消费模型?为什么这么设计?

kafka支持的pull,因为在push模式下,如果消息产生速度远远大于消费者消费消息的速率,那消费者就会不堪重负(你已经吃不下了,但是还要不

断地往你嘴里塞),直到挂掉。而且消费者可以自己控制一次到底获取多少条消息,通过max.poll.record 来控制。

4、Topic的用途是什么?为什么Kafka没有队列?

Topic 将消息分类,生产者和消费者面向的是同一个 Topic。生产者和Topic、Topic和消费者的关系都是多对多。一个生产者可以发送消息到多个Topic,一个消费者也可以从多个Topic获取消息。

5、分区Patition的作用是什么?

为了实现扩展性,提高并发能力。类似于分库分表,实现的也是横向扩展负载的目的。

6、分区数和副本数怎么设置?

分区数目,需要根据具体项目情况通过使用官方提供的测试工具kafka-producer-perf-test.shkafka-producer-perf-test.sh来测试。

副本数量也可以通过测试脚本得到最优解,不过副本数量一定小于Broker数量,否则会报错。

7、分区的副本在Broker上是怎么分布的?

假设有3个Broker,一个Topic有两个分区,每个分区两个副本,可能的分布情况是什么样的?

  1. 第一个分区的第一个副本放置位置是随机从 broker集合选择的;
  2. 其他分区的第一个副本放置位置相对于第一个分区依次往后移;
  3. 每个分区剩余的副本相对于第1个副本放置位置其实是由nextReplicaShift决定的,而这个数也是随机产生的。

8、Segment的作用是什么?

将一个Partition分成多个Segment,不至于一个Partition过大,导致消息查询读取的速度变慢。提高查询读取消息的效率。

9、Consumer Group的含义是什么?

Consumer Group是消费者组的意思,多个Consumer通过设置相同的group id来组成一个Consumer Group。同一个Consumer Group的Consumer消费同一个Topic是互斥的,而且一个partition只能由组内的一个Consumer来消费。多个Consumer消费一个Topic提高了消费消息的吞吐量

10、Consumer Group上次消费的偏移量记录在哪里?怎么更新?

Consumer Group上次消费的偏移量记录在_consumer_offset 的Topic中,主要以GroupMetadataOffsetAndMetadata两个对象存储。这里OffsetAndMetadata保存了消费者组和partition和offset位移信息的元数据。

Consumer Group的偏移量,只有在消费者消费完消息,提交以后,才会更新。

11、生产者送消息如何选择分区?

  1. 如果消息创建的时候指定了分区,就去指定的分区。
  2. 没有制定分区,使用了自定义的分区器,根据分区器计算出去哪个分区。
  3. 没有指定partition值但有key的情况下,使用默认分区器DefaultPartitioner,将key的hash 值与topic的 partition 数进行取余得到partition值;
  4. 既没有partition值又没有key值的情况下,第一次调用时随机生成一个整数(后面每次调用在这个整数上自增),将这个值与topic可用的partition总数取余得到partition值,也就是常说的round-robin算法。

12、生产者acks 1 0 -1的含义是什么?

  1. acks=0,Broker接收到消息就返回(还未写入磁盘)。延迟最低,若Broker故障,丢数据的风险大。
  2. acks=1,等到Partition的leader落盘成功后返回ack,若follower同步成功之前,leader故障,会丢失数据。
  3. acks=-1,Partition的leader和follower全部落盘以后才返回ack。

13、消息主要的物理存储文件有哪些?

14、Kafka中有哪些索引类型?消息怎么通过索引检索?

偏移量索引和时间戳索引。

比如我要检索偏移量是10002673的消息。

  1. 消费的时候是能够确定分区的,所以第一步是找到在哪个segment 中。Segment文件是用base offset命名的,所以可以用二分法很快确定(找到名字不小于10002673的segment)。
  2. 这个segment有对应的索引文件,它们是成套出现的。所以现在要在索引文件中根据offset找position。
  3. 得到position之后,到对应的log文件开始查找offset,和消息的 offset进行比较,直到找到消息。

15、kafka的稀疏索引,间隔由什么决定?为什么不用B+Tree?

间隔有消息的大小决定,只要写入消息超过4K,则偏移量索引增加一条记录。

16、Kafka的日志文件不可能无限扩大,那么可以通过哪些方式释放磁盘空间?

可以有两种方式释放,一种是delete删除,一种是compact压缩。

delete方式,是通过定时任务来执行的,执行间隔默认是5分钟,可以设置。也可以通过配置,确定哪些消息需要删除。

compact方式,是通过保存key相同的最后一个value,来进行压缩的。

17、Kafka副本Leader是怎么选举的?谁来选举?选谁为Leader?什么是AR?什么是ISR?什么是OSR?

副本的leader是通过Controller来选举的 ,使用微软的PacificA算法。在这种算法中,默认是让ISR中第一个replica变成leader。比如ISR是1、5、9,优先让1成为leader。

AR是Assigned-Replicas,一个分区所有的副本。

ISR是In-Sync Replicas,是这些所有的副本中,跟leader 数据保持一定程度同步的。

OSR是Out-Sync Replicas,是跟leader同步滞后过多的副本。

18、Kafka副本follower怎么向Leader同步?什么是HW?什么是LEO?

  • HW(Hight Watermark)是副本水位值,表示分区中最新一条已提交(Committed)的消息的Offset。

  • LEO:Log End Offset,Leader中最新消息的Offset。

  1. follower节点会向Leader发送一个fetch请求,leader向follower’发送数据。
  2. follower接收到数据响应后,依次写入消息并且更新LEO
  3. leader更新HW (ISR最小的LEO)。

19、kafka的offset怎么维护?存在哪里?什么时候更新?

同10

20、一个消费组中的消费者与分区的关系是什么样的?例如topic有3个分区,假如有2个消费者,怎么分配?假如有4个消费者,怎么分配?

假如Topic有3个分区,2个消费者;

这里涉及到,消费者配置是消费策略,如果是RangeAssignor(范围分配),则可能的结果是,{(1,2)(3)}或者{(1){2,3}}

如果是RoundRobinAssginor(轮询),则可能是{(1,3)(2)}

如果是StickyAssignor(粘滞),可能是{(1,2)(3)};{(1){2,3}};{(2){1,3}}

假如是3分区,4个消费者的话,前3个消费者一个人一个,第四不消费。


http://chatgpt.dhexx.cn/article/7xjhu9ef.shtml

相关文章

kafka面试题知识点整理

kafka-面试题整理 刚刚学了kafka,整理一些面试题知识点,帮助记忆1、什么是kafka2、什么是消息队列3、kafka通信流程4、Leader选举流程5、副本及同步原理6、消费者消费数据的方式7、分区分配策略以及原理8、如何保证消息的可靠性9、数据有序/乱序10、幂等…

kafka面试题

1.Kafka数据积压如何处理? 1. 实时/消费任务挂掉导致的消费滞后 a. 任务重新启动后直接消费最新的消息,对于"滞后"的历史数据采用离线程序进行"补漏"。b. 任务启动从上次提交offset处开始消费处理 如果积压的数据量很大&#xff0c…

Kafka 面试题,看这一篇就够了

Kafka 基础 消息系统的作用 大部分小伙伴应该都清楚,这里用机油装箱举个例子: 所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用。 引入一个场景,我们知道中国移动,中国联…

32 道常见的 Kafka 面试题

最近很多粉丝后台留言问了一些大数据的面试题,其中包括了大量的 Kafka、Spark等相关的问题,所以我特意抽出时间整理了一些大数据相关面试题,本文是 Kafka 面试相关问题,其他系列面试题后面会陆续整理,欢迎关注过往记忆…

Kafka面试题及答案整理 110道 (持续更新)

最新Kafka面试题【附答案解析】Kafka面试题及答案,Kafka最新面试题及答案,Kafka面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的。这些答案难免会存在一些错误,仅供大家参考。如果发…

2022 最新 Kafka 面试题

Kafka 面试题 1、如何获取 topic 主题的列表2、生产者和消费者的命令行是什么?3、consumer 是推还是拉?4、讲讲 kafka 维护消费状态跟踪的方法5、讲一下主从同步\6、为什么需要消息系统,mysql 不能满足需求吗?1.解耦:2…

20道常见的kafka面试题以及答案

JAVA面试宝典,搞定JAVA面试,不再是难题,系列文章传送地址,请点击本链接。 目录 1、kafka的消费者是pull(拉)还是push(推)模式,这种模式有什么好处? 2、kafka维护消息状态的跟踪方法 3、zookeeper对于ka…

VS2017安装打包插件

1、打开VS2017:工具-》》扩展和更新-》》 2、搜索Microsoft Visual Studio 2017 Installer Projects 3、点击下载,下载完成 4、按照提示,关闭所有VS后,自动安装 5、选择修改 6、安装完成

VS2017安装CLR

打开Visual Studio Community 2017,选择更改,然后在右侧安装详细信息将C/CLI支持打上勾,然后更新就可以了。 在VS里面新建项目就可以看见已经有CLR了。

VS2017安装成功后,无MFC选项解决办法

在安装VS2017时,勾选了安装MFC工作负载,但是新建项目时没有MFC选项。解决办法如下: 首先打开VS INSTALLER,点击修改 发现已经勾选MFC工作负载,点击右侧“安装详细信息”栏中的“使用C的桌面开发” 勾选“用于X86和X6…

vs2017安装勾选哪些_vs2017安装以编写c语言

安装这两个插件就行了 创建第一个项目 注意:C 是在 C 语言的基础上进行的扩展,所有在本质上,C 已经包含了 C 语言的所有内容,所以大部分 IDE 会默认创建后缀名为 .cpp 的C 源文件。为了大家养成良好的规范,写 C 语言代…

VS2017安装qt插件失败(已解决)

VS2017安装qt插件失败(已解决) 试过很多方法没有解决此问题,偶然间删除一个文件夹,重新安装就成功了。 解决方法:删除红色框中的文件夹即可。(该文件路径在C盘的用户文件夹中查找,勾选隐藏的项目即可看到隐…

vs2017 安装Qt VS Tools ,新建项目没有Qt GUI Application选项 ,解决方法

一、查看测试栏有没有该选项 二、如果也没有,就是Qt GUI Application版本太高 1、已知Qt VS Tools 2.4.0和Qt VS Tools 2.1.2是有的, 分享一个Qt VS Tools 2.1.2 链接:https://pan.baidu.com/s/18AmBnxQHqmVspsPlQmbPBw 提取码:1…

VS2017安装插件SVN

材料 VS安装程序。VisualSVN安装程序。 前期准备 在代码管理的服务器上安装SVN server。 在本机安装TortoiseSVN(也就是SVN的客户端,可在文件库中查看代码以及文档)。 Visual Studio安装SVN插件 安装VisualSVN,按照软件提示一…

C#开发环境配置-VS2017安装与卸载

安装 双击安装.exe(必须保证联网) 这三项要勾选 安装完成启动程序,需要登陆账户邮箱密码,不登陆也可以使用30天。 VS2017设置起始页 vs2017将打开起始页放到了文件菜单下:文件》起始页 将程序快捷方式放在桌面是紫色的图标&am…

VS2017安装(在线、离线)

VS2017安装(离线版) ------------------------------------------------------------------------------------- 此百度云链接有博客提及的所有东西哦!!! 链接:https://pan.baidu.com/s/1zKcdSQxUetYjs3roi…

vs2017安装libjpeg库

导语 libjpeg对jpeg的功能实在是太强大了,下面简单介绍一下怎么在VS2017下安装使用。看了其他好兄弟们的攻略,把自己踩的坑总结一哈。 下载 http://www.ijg.org/ windows平台选择zip即可 编译 我们是在windows平台下,所以要么使用cmake要…

Qt5.11.1 + VS2017 安装 详细过程

一.安装VS2017 1.安装windows10 SDK 到此网址下载windows10 SDK: https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?skuCommunity&rel15# 安装windows10 SDK 2.安装VS2017 到此下载VS2017: https://developer.microsoft.com/z…

如何为vs2017安装svn

方法一 打开vs-工具-扩展和更新-搜索svn 选择 VisualSVN for Visual Studio 2017 点击安装即可 安装后重启vs 方法二 安装vs后,去官网下载VisualSVN-VS2017-6.7.3.vsix(点击可跳转官网) 安装后重启vs

vs2017安装qt插件及安装qt插件后的设置

vs2017安装qt插件 引言涉及内容一、vs2017安装qt插件的过程二、安装qt插件成功后的设置三、创建第一个关于qt的程序四、设置属性后代码可以查看 引言 安装vs2017后需要在vs2017中安装qt插件,这样可以直接在vs2017中开发qt的项目,这里记录一下。 涉及内…