假设我在Kafka的一个给定主题上有10个分区。我的选择是如何在消费者之间自动平衡这10个分区的负载?
我读过这篇文章https://stackoverflow.com/a/28580363/317384 但我不确定它是否涵盖了我所寻找的,或者我只是没有得到它。
如果我启动一个worker,每个分区有一个使用者,那么所有的工作都将由该worker消耗。
但如果我在其他地方制造同一个工人的另一个示例会怎么样呢?客户端库/kafka是否会检测到这一点,并重新平衡两个worker之间的负载,以便worker1上的一些活动使用者现在处于空闲状态,而worker2上的相同使用者处于活动状态?
我想能够添加和删除工人的需求,并分散这些负载,这是可能的吗?
e、 g.由此:
对此:
1条答案
按热度按时间krcsximq1#
Kafka消费者是消费群体的一部分。组中有一个或多个消费者。每个分区被分配给一个使用者。Kafka就是这样扩展的。如果您的使用者比分区多,那么您的一些使用者将处于空闲状态。如果分区多于使用者,则可能会将多个分区分配给单个使用者。
当一个新的使用者加入时,会发生重新平衡,并为新使用者分配一些先前分配给其他使用者的分区。在您的例子中,如果有10个分区全部由一个使用者使用,而另一个使用者加入,则会有一个重新平衡,之后,每个使用者(通常)会有5个分区。
值得注意的是,在重新平衡的过程中,消费者群体会“暂停”。当消费者优雅地离开,或者领导者发现消费者已经离开时,也会发生类似的事情。