Apache kafka 如果卡夫卡消费者实例死亡,会发生什么? Kafka Broker有3个分区 卡夫卡消费者实例的计数为3 突然,一个消费者案例死亡

Apache kafka 如果卡夫卡消费者实例死亡,会发生什么? Kafka Broker有3个分区 卡夫卡消费者实例的计数为3 突然,一个消费者案例死亡,apache-kafka,kafka-consumer-api,partition,Apache Kafka,Kafka Consumer Api,Partition,我知道,如果一个Kafka使用者实例死亡,Kafka代理将重新平衡,另一个使用者实例将被分配到该分区 我想知道假设另一个实例使用它最初使用的所有分区,然后分配和使用死分区是否正确 (我是否必须在客户端代码中实现ConsumerBalanceListener?) 如果是这种情况,在使用消息时会有任何延迟吗 谢谢。默认的分区分配策略是。对于每个订阅的主题,此策略: 将分区按数字顺序排序 将消费者按字典顺序分类 尝试为每个使用者分配相等数量的分区。如果使用者的数量没有平均地划分为分区的数量,那么前几

我知道,如果一个Kafka使用者实例死亡,Kafka代理将重新平衡,另一个使用者实例将被分配到该分区

我想知道假设另一个实例使用它最初使用的所有分区,然后分配和使用死分区是否正确

(我是否必须在客户端代码中实现ConsumerBalanceListener?)

如果是这种情况,在使用消息时会有任何延迟吗


谢谢。

默认的分区分配策略是。对于每个订阅的主题,此策略:

  • 将分区按数字顺序排序
  • 将消费者按字典顺序分类
  • 尝试为每个使用者分配相等数量的分区。如果使用者的数量没有平均地划分为分区的数量,那么前几个使用者将有一个额外的分区
在示例的开头,有

  • 分区0、1、2
  • 消费者A、B、C
这一战略规定:

  • 使用者A:分区0
  • 消费者B:分区1
  • 消费者C:分区2
假设消费者C死亡。再平衡在不同的时间执行这一战略

  • 分区0、1、2
  • 消费者A、B
该战略规定:

  • 使用者A:分区0,1
  • 消费者B:分区2

因此,在此场景中,重新平衡后分配给使用者B的分区集不包含重新平衡前分配给它的分区。

如果我没有弄错,重新平衡将中断对不同使用者的处理

如果您在每个批处理结束时提交抵销,则意味着您的批处理中已处理的所有数据都将重新处理

避免使用该方法,允许您在批处理的中间提交偏移,或者在您推断的情况下执行<代码> Cuffer-RealBaleCelistist< /C>。

partitionsrevoked(集合分区)上的公共void

在重新平衡开始之前和使用者停止使用消息之后调用。这是您想要提交偏移量的地方,所以下一个获得该分区的人都知道从哪里开始


回答你的最后一个问题:是的,重新平衡意味着消费信息的延迟。

谢谢。有件事我还不明白。当消息总数为90条时,在这种情况下,消费者B消费30条消息是否合理?在重新平衡之后,重新排列所有分区(0、1、2)上的数据是否正确?消息键确定写入消息的分区。一旦写入一个分区,消息就不会移动到另一个分区。如果密钥未指定或为空,则生产者会选择一个随机分区。