1

我正在使用 Kafka Strimzi 运算符在 Kubernetes 上运行 Kafka。我通过使用以下配置我的消费者来使用增量粘性重新平衡策略:

ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG,
      org.apache.kafka.clients.consumer.CooperativeStickyAssignor.class.getName()

每次我在我的消费者组中扩展消费者时,该组中的所有现有消费者都会生成以下异常

线程“主”org.apache.kafka.common.errors.RebalanceInProgressException 中的异常:由于消费者正在为自动分区分配进行重新平衡,因此无法完成偏移提交。您可以尝试通过调用 poll() 来完成重新平衡,然后重试该操作

关于导致此异常的原因和/或如何解决它的任何想法?

谢谢你。

4

1 回答 1

3

每当消费者组的元数据信息发生变化时,就会发生消费者重新平衡。

在一个组中添加更多消费者(用你的话来说是缩放)就是这样一种变化,它会触发重新平衡。在此更改期间,每个消费者将被重新分配分区,因此在重新分配完成之前不知道要提交哪些偏移量。现在,StickyAssignor确实尝试并确保尽可能保留先前的分配,但仍将触发重新平衡,甚至分区的分配将优先于保留先前的分配。(参考 - Kafka 文档

休息,异常的消息是不言自明的,当重新平衡发生时,一些操作被禁止。

如何避免这种情况?

这是一个棘手的问题,因为 Kafka 需要重新平衡才能有效地工作。您可以使用一些做法来避免不必要的影响:

  1. 增加轮询时间——max.poll.interval.ms这样就减少了遇到这些异常的可能性。
  2. 减少轮询记录的数量 -max.poll.recordsmax.partition.fetch.bytes
  3. 尝试并使用最新版本的 Kafka(如果您使用的是旧版本,则升级),因为到目前为止,许多最新升级都对重新平衡协议进行了改进
  4. 使用静态成员协议来减少再平衡
  5. 可能会考虑group.initial.rebalance.delay.ms为空的消费者组进行配置(第一次部署或销毁所有内容并重新部署)

这些技术只能帮助您减少不必要的行为或异常,但不会完全阻止重新平衡。

于 2021-06-21T13:42:22.267 回答