如果Kafka消费者示例死亡,会发生什么?

raogr8fs  于 2021-06-08  发布在  Kafka
关注(0)|答案(2)|浏览(392)

kafka broker有3个分区。
Kafka消费者示例的计数是3。
突然,一个消费者示例死亡。
我知道,如果一个kafka使用者示例死亡,kafka代理将重新平衡,另一个使用者示例将被分配到该分区。
我想知道假设另一个示例使用它最初使用的所有分区,然后分配和使用死分区是否正确。
(我是否必须在客户端代码中实现ConsumerBalanceListener?)
如果是这样的话,在使用消息时会有延迟吗?
谢谢您。

5w9g7ksd

5w9g7ksd1#

默认的分区分配策略是rangeassignor。对于每个订阅的主题,此策略:
将分区按数字顺序排序。
将消费者按字典顺序分类。
尝试为每个使用者分配相等数量的分区。如果使用者的数量没有平均划分为分区的数量,那么前几个使用者将有一个额外的分区。
在你的例子的开头,有
分区0、1、2
消费者a、b、c
此策略分配:
使用者a:分区0
消费者b:分区1
消费者c:分区2
假设消费者c死了。再平衡是在
分区0、1、2
消费者a、b
该战略规定:
使用者a:分区0,1
消费者b:分区2
因此在这个场景中,重新平衡后分配给使用者b的分区集不包含重新平衡前分配给它的分区。

enxuqcxy

enxuqcxy2#

如果我没弄错的话,再平衡会打断你们不同消费者的处理。
如果您在每个批处理结束时提交抵销,则意味着您的批处理中已处理的所有数据都将重新处理。
为了避免这种情况,你可以 consumer.commitAsync() 它允许您在批处理过程中提交偏移量,或者实现 ConsumerRebalanceListener 正如你所推断的。 public void onPartitionsRevoked(Collection<TopicPartition> partitions) 在重新平衡开始之前和消费者停止消费消息之后调用。这是您要提交偏移量的地方,所以下一个获得这个分区的人将知道从哪里开始。
Kafka的权威指南
回答你的最后一个问题:是的,再平衡意味着消费信息的延迟。

相关问题