平衡Kafka消费者

时间:2016-10-30 06:35:17

标签: apache-kafka kafka-consumer-api

我们假设我在Kafka中为给定主题分配了10个分区。 我可以选择在消费者之间自动平衡这10个分区吗?

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

如果我为每个分区启动一个具有一个消费者的工作人员,那么该工作人员将使用所有工作。

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

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

e.g。 由此: enter image description here

到此: enter image description here

1 个答案:

答案 0 :(得分:11)

Kafka消费者是消费者群体的一部分。一个组中有一个或多个消费者。每个分区都分配给一个使用者。分区是Kafka扩展的方式。如果您拥有的消费者多于分区,那么您的一些消费者将无所事事。如果您有比消费者更多的分区,则可能会将多个分区分配给单个使用者。

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

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