【问题标题】:Can a kafka consumer group freeze during a rebalancekafka 消费者组可以在重新平衡期间冻结吗
【发布时间】:2020-09-20 08:43:26
【问题描述】:

Kafka 消费者组的滚动部署会导致该组冻结吗?

让我们考虑一下这种情况,

  1. 我们开始滚动部署
  2. 一个消费者离开该组
  3. Kafka 注意到这一点并触发重新平衡(因此消费停止)
  4. 发生了再平衡,但很快就有新的消费者想要加入
  5. 还有另一个消费者离开
  6. 再次发生新的重新平衡
  7. (循环直到部署完成)

所以如果你有一个足够大的集群,并且在一台机器上完成部署需要一些时间(通常是这种情况),这会导致消费完全冻结吗?

如果是,在生产中进行消费者组更新的策略是什么

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    是的,这绝对是可能的。最近进行了许多改进,以减少此类事件期间的停机时间。我建议启用一项或两项或以下功能:

    Static membership 是在 2.3 中添加的,可以防止在组的已知成员被退回时发生重新平衡。这要求客户端和代理都在 2.3+ 版本上

    Incremental cooperative rebalancing 使组能够更快地重新平衡,并允许单个成员在整个重新平衡过程中继续消费。在滚动部署期间,您仍会看到重新平衡,但它们不会导致在此期间的消耗完全冻结。这完全是客户端,因此它可以与任何代理一起使用,但您的客户端应该在 2.5.1+ 版本上

    【讨论】:

    • 对于Static membership -> 我可以理解,(连同客户端/经纪人应该在2.3+)在客户端添加group.instance.id 就足够了。但是对于Incremental cooperative rebalancing,只需要客户端版本2.5.1+就够了吧?我的意思是,有什么特别需要做的配置吗?
    • 是的,对于普通消费者组,您需要将分区分配器设置为 CooperativeStickyAssignor。实际配置的名称是“partition.assignment.strategy”(注意,如果你想进行滚动升级,你必须遵循特定的升级路径来切换分配器。基本上你需要两次滚动反弹,第一个将 CooperativeStickyAssignor 添加到 partition.assignment.strategy 列表中,然后第二次反弹以删除旧的分配器。但是如果您要启动一个新应用程序,则可以从 CooperativeStickyAssignor 开始)。
    • 对于 Streams 应用程序,默认启用协作重新平衡,因此您无需执行任何操作即可将其打开。
    猜你喜欢
    • 2017-04-20
    • 2017-06-19
    • 2020-08-04
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2018-07-27
    • 2018-05-23
    • 1970-01-01
    相关资源
    最近更新 更多