Kafka:如果有许多消费者使用相同的group-id订阅一个主题,哪个消费者会收到消息?

时间:2015-09-12 15:33:56

标签: apache-kafka

enter image description here

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

1 个答案:

答案 0 :(得分:2)

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

所以第一点是没有理由拥有更多的消费者线程(并且每个消费者至少有一个消费者线程),而不是消耗的分区数量。原因是如果你有更多的消费者线程而不是分区,一些消费者线程最终会被闲置,只会浪费资源。因此,根据您所附的示例,没有必要为3个分区设置4个消费者。

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

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

您还可以在/consumers/[group_id]/owners/[topic]/[partition]

中查看Zookeeper中您的使用者组的当前分区分配