【问题标题】:Kafka: Which consumer will get the message if there are many consumers that subscribe one topic with the same group-id?Kafka:如果有多个消费者订阅一个具有相同 group-id 的主题,哪个消费者会收到消息?
【发布时间】:2015-09-14 15:24:48
【问题描述】:

假设我们有 4 个具有相同 group-id 的消费者和一个包含 3 个分区的主题。如果生产者向分区 1 发布消息,那么哪个消费者会收到这条消息?

【问题讨论】:

  • 首先,您的示例中的第四个消费者将什么也不做,因为如果消费者的数量大于分区的数量,一些消费者将处于空闲状态并且将没有分区来消费。其次,请看这个关于再平衡如何工作的答案 -stackoverflow.com/questions/28574054/…
  • @serejja 谢谢,你可以在下面回答

标签: apache-kafka


【解决方案1】:

我会在这里给出更详细的答案。

所以第一点是没有理由拥有比正在消费的分区数更多的消费者线程(并且每个消费者至少有一个消费者线程)。原因是如果你的消费者线程比分区多,一些消费者线程最终会处于空闲状态,只会浪费资源。因此,鉴于您附加的示例,3 个分区有 4 个消费者是没有意义的。

第二点——分区分配取决于组内消费者选择的策略。目前有 2 种分区分配策略 - RangeRoundRobin。如果您使用Range 策略,您可以预测重新平衡后每个消费者将使用哪些分区。使用RoundRobin 策略虽然您无法预先预测重新平衡后消费者的分区分配。

解释消费者重新平衡如何工作以及如何分配分区的详细答案是here

您还可以在 /consumers/[group_id]/owners/[topic]/[partition]/consumers/[group_id]/owners/[topic]/[partition] 的 Zookeeper 中查看您的消费者组的当前分区分配

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 2019-01-10
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    相关资源
    最近更新 更多