kafka面试题以及答案总结

1、分区消费模型和组消费模型对比:

分区消费模型更加灵活但是:
(1)需要自己处理各种异常情况;
(2)需要自己管理offset(以实现消息传递的其他语义);
组消费模型更加简单,但是不灵活:
(1)不需要自己处理异常情况,不需要自己管理offset;
(2)只能实现kafka默认的最少一次消息传递语义;

两种生产模型对比:
1、同步生产模型:
(1)低消息丢失率;
(2)高消息重复率(由于网络原因,回复确认未收到);
(3)高延迟;
2、异步生产模型:
(1)低延迟;
(2)高发送性能;
(3)高消息丢失率(无确认机制,发送端队列满),1打包发送的时候无网络,会丢掉全部队列消息,2发送端队列满的时候无网络,会丢掉发送到队列的消息。

模型选择:
(1)一条消息都不能丢的,低吞吐量,选择同步生产模型;
(2)可以容忍丢消息(日志),高吞吐量,选择异步生产模型;

2、Kafka 中的 ISR(InSyncRepli)、OSR(OutSyncRepli)、AR(AllRepli)代表什么?

ISR:同步副本列表
AR:所有副本列表
OSR:与Leader副本滞后过多的副本
AR=ISR+OSR

3、Kafka 中的 HW、LEO 等分别代表什么?

LEO(Log end offset):每个分区最后一条消息的偏移量,分区的每个副本都维护着自己的LEO。
HW(Hight Watermark):每个分区对应的ISR中最小的LEO作为HW,HW之前的消息表示已提交的消息,对消费者是可见的。HW之后的消息表示还没被 Follower 副本同步完成。

4、Kafka 中是怎么体现消息顺序性的?
每个分区内,每条消息都有一个offset,所以只能保证一个分区内消息有序。

5、Kafka 中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么?
分区器、序列化器、拦截器、消息累加器详解

拦截器->序列化器->分区器

6、Kafka生产者客户端中使用了几个线程来处理?分别是什么?
2个线程,主线程和sender线程。主线程负责创建消息,然后通过拦截器、序列化器、分区器缓存到消息累加器 RecordAccumulator 中。sender线程负责将 RecordAccumulator 中的消息发送到kafka 中。

7、“消费组中的消费者个数如果超过 topic 的分区,那么就会有消费者消费不到数据”这句话是否正确?
正确

8、消费者提交消费位移时提交的是当前消费到的最新消息的 offset 还是 offset+1?
offset +1

9、有哪些情形会造成重复消费?
消费者消费了消息没有来得及提交偏移量(宕机以及其他问题)

10、那些情景会造成消息漏消费?
消费者还没有处理完消息就自动提交了offset(异常结束)

11、简述消费者与消费组之间的关系
消费者从属于消费者组,消费偏移以消费者组为单位。每个消费者组可以独立消费主题的所有数据,一条消息只能被同一个消费组的某一个消费者消费。

12、当你使用kafka-topics.sh创建(删除)了一个topic之后,Kafka背后会执行什么逻辑?
创建:在ZK上/brokers/topics/下节点 kafkabroker会监听节点变化创建主题。
删除:调用脚本删除topic会在ZK上将topic设置待删除标志,Kafka后台有定时的线程会扫描所有需要删除的topic进行删除。

13、topic的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么?
可以

14、topic的分区数可不可以减少?如果可以怎么减少?如果不可以,那又是为什么?
不可以,分区数据难以处理。

15、创建topic时如何选择合适的分区数?
根据集群的机器数量以及需要的吞吐量来决定分区数。

16、Kafka目前有那些内部topic,它们都有什么特征?各自的作用又是什么?
__consumer_offsets 以下划线开头,保存消费组的偏移。

17、优先副本是什么?它有什么特殊的作用?
优先副本 会是默认的leader副本 发生leader变化时重选举会优先选择优先副本作为leader

18、简述Kafka的日志目录结构
每个partition一个文件夹,包含四类文件.index .log .timeindex leader-epoch-checkpoint
.index .log .timeindex 三个文件成对出现 前缀为上一个segment的最后一个消息的偏移 log文件中保存了所有的消息 index文件中保存了稀疏的相对偏移的索引 timeindex保存的则是时间索引
leader-epoch-checkpoint中保存了每一任leader开始写入消息时的offset,会定时更新
follower被选为leader时会根据这个确定哪些消息可用

19、如果我指定了一个offset,Kafka怎么查找到对应的消息?
(1)通过文件名前缀数字x找到该绝对offset 对应消息所在文件
(2)offset-x为在文件中的相对偏移
(3)通过index文件中记录的索引找到最近的消息的位置
(4)从最近位置开始逐条寻找

猜你喜欢

转载自blog.csdn.net/qq_36588424/article/details/109175746
今日推荐