Kafka 增量粘性再平衡

4

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

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

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

Exception in thread "main" org.apache.kafka.common.errors.RebalanceInProgressException: 由于消费者正在进行重新平衡以进行自动分区分配,因此无法完成偏移提交。您可以尝试通过调用 poll() 完成重新平衡,然后重试该操作。

你知道是什么原因引起了这个异常以及如何解决吗?

谢谢。

1个回答

9
消费者重新平衡是指当消费者组的元数据信息发生更改时发生的情况。在同一组中添加更多的消费者(用您的话来说就是缩放)是其中之一,会触发重新平衡。在此更改期间,每个消费者将被重新分配分区,因此在重新分配完成之前它们将不知道要提交哪些偏移量。现在,“StickyAssignor”确实尝试确保尽可能保留先前的分配,但重新平衡仍将被触发,并且分区的均匀分布将优先于保留先前的分配。(参考 - Kafka文档
除此之外,异常消息本身就很清楚,即在重新平衡发生时,某些操作是被禁止的。
如何避免这种情况?
这是一个棘手的问题,因为Kafka需要重新平衡才能有效地工作。有一些做法可以用来避免不必要的影响:
  1. 增加轮询时间 - max.poll.interval.ms - 以减少出现这些异常的可能性。
  2. 减少轮询记录数 - max.poll.recordsmax.partition.fetch.bytes
  3. 尝试使用最新版本的Kafka(或升级,如果您正在使用旧版本),因为迄今为止的许多最新升级已经对重新平衡协议进行了改进
  4. 使用静态成员协议以减少重新平衡
  5. 可以考虑为空的消费者组配置group.initial.rebalance.delay.ms(无论是首次部署还是销毁并重新部署)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接