【问题标题】:Balancing Kafka consumers平衡 Kafka 消费者
【发布时间】:2016-11-08 06:54:39
【问题描述】:

假设我有 10 个分区用于 Kafka 中的给定主题。 在消费者之间自动负载平衡这 10 个分区的选项是什么?

我已阅读此帖子 https://stackoverflow.com/a/28580363/317384,但我不确定它是否涵盖了我正在寻找的内容,或者我只是没有得到它。

如果我为每个分区启动一个带有一个消费者的工作器,那么所有工作都将由该工作器消耗。

但是,如果我在其他地方启动同一个工人的另一个实例会发生什么? 客户端库/Kafka 是否会以某种方式检测到这一点并重新平衡两个工作人员之间的负载,以便工作人员 1 上的一些活动消费者现在处于空闲状态,而工作人员 2 上的相同消费者变为活动状态?

我希望能够按需添加和删除工作人员,并将负载分散到这些工作人员之间,这可能吗?

例如 由此:

对此:

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    Kafka 消费者是消费者群体的一部分。一个组中有一个或多个消费者。每个分区被分配给一个消费者。分区是 Kafka 扩展的方式。如果您的消费者多于分区,那么您的一些消费者将处于空闲状态。如果您的分区多于消费者,则可能会将多个分区分配给单个消费者。

    当新的消费者加入时,会发生重新平衡,并为新消费者分配一些先前分配给其他消费者的分区。在您的情况下,如果有 10 个分区都被一个消费者消费,而另一个消费者加入,则会进行重新平衡,之后,(通常)每个消费者将有 5 个分区。

    值得注意的是,在重新平衡期间,消费者组“暂停”。当消费者优雅地离开时,或者领导者检测到消费者已经离开时,也会发生类似的事情。

    【讨论】:

    • 消费者组是否支持独立于 Kafka 本身的客户端库?我没有完全理解他们在这里所说的 github.com/Shopify/sarama/issues/410(我使用的 Go sdk)
    • 酷。消费者群体是 Kafka 的基础。客户端也很聪明——它们从服务器上拿走了很多东西。我对 go 客户端了解不多,但我认为它没有理由不跟随其他客户端。
    • @ashic "如果你的消费者多于分区,那么你的一些消费者将处于空闲状态。"引用您的回复,想知道​​哪个消费者空闲以及如何决定?谁将决定哪个消费者将获得下一个事件?
    • 主题被划分为分区,消费者获得分配给他们的分区(由组协调器,参见confluent.io/blog/…)。假设有 2 个分区和 3 个消费者。 2 个消费者拥有 2 个分区意味着第 3 个消费者缺少任何消息。
    猜你喜欢
    • 2020-06-30
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2019-08-08
    • 2018-05-23
    • 1970-01-01
    相关资源
    最近更新 更多