Kafka面试题(五)--内含面试重点
文章目录
- 1、简述kafka中的数据清理策略(面试重点)
- 2、消费者组和分区数之间的关系是怎样的?
- 3、kafka如何知道哪个消费者消费哪个分区?
- 4、kafka消费者的消费分区策略有哪些,默认是什么?
- 5、kafka中的消费者,他们的偏移量存储在哪里(偏移量存储机制)
- 6、kafka中数据积压太多,怎么办?(提高消费者的吞吐量)(面试重点)
- 7、Kafka中的数据在消费过程中,有漏消费和重复消费的情况,怎么办(面试重点)
- 8、kafka中的数据已经消费过的数据,是否可以再次消费?怎么做?
1、简述kafka中的数据清理策略(面试重点)
Kafka 中提供的日志清理策略有 delete 和 compact 两种:
1、delete 日志删除:将过期数据删除,可以基于时间设置过期时间,默认是7天,也可以基于大小,默认是关闭
2、compact 日志压缩(合并的意思,不是真的压缩):对于相同key的不同value值,只保留最后一个版本,这种策略只适合特殊场景。
2、消费者组和分区数之间的关系是怎样的?
1、消费者组内每个消费者消费不同分区,一个分区不能由组内多个消费者消费
2、消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者
3、kafka如何知道哪个消费者消费哪个分区?
生产者把数据发送给各个分区,每个broker节点都有一个coordinator(消费者协调器),消费者组对分区进行消费,到底哪个消费者消费哪个分区呢?首先groupId对50取模,看最后的结果是哪个分区节点,假如是1分区,那么1分区的协调器就是本次消费者组的老大,消费者纷纷向该协调器进行注册,协调器从中随机选择一个消费者作为本次消费的Leader,然后把本次消费的具体情况发送给Leader,让其制定一个消费计划(就是哪个消费者消费哪个分区),然后Leader发送给协调器,协调器再进行群发,将计划公布,各个消费者按照这个计划进行消费。
4、kafka消费者的消费分区策略有哪些,默认是什么?
Kafka有四种主流的消费者分区分配策略:
Range、RoundRobin(轮询)、Sticky(粘性)、CooperativeSticky(配合的粘性),默认策略是Range + CooperativeSticky
每个消费者都会和消费者协调器保持心跳,默认是3s,一旦超过45秒没有响应,就会将该消费者移除,触发再平衡;或者消费者处理消息时长大于5分钟,也会触发再平衡。
5、kafka中的消费者,他们的偏移量存储在哪里(偏移量存储机制)
Kafka0.9版本之前,consumer默认将offset 保存在Zookeeper中
Kafka0.9版本之后,consumer默认将offset保存在Kafka一个内置的topic中,该topic为__consumer_offsets
6、kafka中数据积压太多,怎么办?(提高消费者的吞吐量)(面试重点)
如果是消费能力不足
,则增加主题的分区数量,并且同时增大每个消费者组中的消费者数量,使得分区数=每个消费者组中的消费者数量
如果是数据处理不及时
,则提高消费者每批拉取的数据量。
7、Kafka中的数据在消费过程中,有漏消费和重复消费的情况,怎么办(面试重点)
需要先了解两个概念:
重复消费
:已经消费了数据,但是 offset 没提交。(自动提交 offset引起的)
漏消费
:先提交 offset 后消费,有可能会造成数据的漏消费。(手动提交 offset 引起的)
需要将Kafka消费端的消费过程与提交offset 过程做原子绑定。此时我们需要将Kafka的offset提交到支持事务的自定义介质(比如MySQL)。
8、kafka中的数据已经消费过的数据,是否可以再次消费?怎么做?
java代码中,有一个非常重要的方法 seek,可以指定 offset 进行消费,其中需要指定需要消费的主题,分区以及偏移量