当一名消费者崩溃/崩溃时的卡夫卡消费者行为

时间:2018-11-30 05:56:57

标签: apache-kafka kafka-consumer-api jvm-crash kafka-rebalance

我的主题有115个分区,大约有130个消费者。我希望有115个使用者处于活动状态(分配为1到1),其余15个使用者处于空闲状态。

几次,我观察到由于触发了重新平衡而导致高内存和JVM处于挂起状态。但是,我不确定这是否会导致完全重新平衡(即,健康节点的分配也会更改??)还是仅将死节点的已分配分区分配给其中一个空闲节点?

此外,在重新启动应用程序的情况下(我的每个JVM是一个分布式1线程/用户),重新平衡的行为如何?当节点一个接一个地启动(滚动重新启动)时,重新平衡将发生115次(即,每次新消费者每次加入该组),或者在启动重新平衡之前应用一些阈值/等待时间(以确保所有健康的节点)加入应用程序)?

2 个答案:

答案 0 :(得分:0)

只要具有相同组ID的Kafka消费者加入该组或离开该组,就会触发消费者重新平衡。可以通过关闭使用者连接或在JVM或服务器崩溃的情况下通过超时来明确退出使用者组。

因此,在您的情况下,是的,消费者的滚动重启将触发115个消费者重新平衡。在卡夫卡开始重新平衡之前,没有“阈值”或“等待期”。

答案 1 :(得分:0)

默认使用enter image description here-可能会导致即使健康的消费者在其他节点发生问题时也一遍又一遍地分配不同的分区。这也可能意味着将对健康的消费者进行分区。您可以对其进行调整,以便它使用PartitionAssignor接口的不同实现-例如RageAssignor.java粘性分配器的一个优点是,通常,它减少了在重新分配期间实际从一个使用者转移到另一个使用者的分区的数量。”

如果您想深入了解StickyAssignor.java,我会建议您阅读https://medium.com/@anyili0928/what-i-have-learned-from-kafka-partition-assignment-strategy-799fdf15d3ab