【问题标题】:Kafka incremental sticky rebalancingKafka增量粘性再平衡
【发布时间】:2021-09-05 00:46:28
【问题描述】:

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: kubernetes apache-kafka kafka-consumer-api strimzi


    【解决方案1】:

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

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

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

    如何避免这种情况?

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-03
      • 1970-01-01
      • 2019-02-27
      • 2018-10-04
      • 1970-01-01
      • 2020-06-30
      • 2020-12-31
      • 2015-04-18
      • 1970-01-01
      相关资源
      最近更新 更多