我知道如果Kafka Consumer实例死亡,Kafka Broker将重新平衡,另一个消费者实例将分配给该分区。
我想知道假设另一个实例消耗它最初消耗的所有分区然后分配和使用死分区是否正确。
(我是否必须在客户端代码中实现ConsumerRebalanceListener?)
如果是这种情况,消费信息会有延迟吗?
谢谢。
答案 0 :(得分:0)
默认分区分配策略为RangeAssignor。对于每个订阅的主题,此策略:
在您的示例开头,有
此策略指定:
假设消费者C死亡。
重新平衡执行此策略战略分配:
因此,在此方案中,重新平衡后分配给使用者B的分区集不包含在重新平衡之前分配给它的分区。
答案 1 :(得分:0)
如果我没记错的话,重新平衡会中断您其他消费者的处理。
如果您在每个批次的末尾提交偏移量,则意味着将重新处理批次中所有已处理的数据。
为避免这种情况,您可以使用consumer.commitAsync()
(允许您在批处理过程中提交偏移量),也可以根据推断实现ConsumerRebalanceListener
。
public void onPartitionsRevoked(Collection<TopicPartition> partitions)
在重新平衡开始之前和使用者停止使用消息之后调用。这是您要提交偏移量的位置,因此下一个获得此分区的人将知道从何处开始。
回答最后一个问题:是的,重新平衡意味着延迟了邮件的使用。