Kafka增量粘性再平衡

Maz*_*ine 5 apache-kafka kubernetes kafka-consumer-api strimzi

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

ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG,
      org.apache.kafka.clients.consumer.CooperativeStickyAssignor.class.getName()
Run Code Online (Sandbox Code Playgroud)

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

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

知道导致此异常的原因和/或如何解决它吗?

谢谢。

小智 10

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

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

休息一下,异常的消息是不言自明的,即在进行重新平衡时,某些操作是被禁止的。

如何避免此类情况的发生?

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

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

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