我的主题有115个分区和大约130个消费者。我预计115个消费者处于活动状态(1对1分配),其余15个消费者处于空闲状态。
有几次,我观察到高内存和jvm处于挂起状态,从而触发了重新平衡。但是,我不确定这是否会导致完全重新平衡(即,健康节点的分配也会发生变化??)或者只将死节点的分配分区分配给空闲节点之一?
另外,在重新启动应用程序的情况下(我的是每个jvm一个分布式线程/使用者),重新平衡的行为如何?当节点一个接一个地启动(滚动重新启动)时,重新平衡会发生115次(即每次新使用者加入组时),还是在启动重新平衡之前应用了一些阈值/等待(以确保所有健康的节点都加入应用程序)?
2条答案
按热度按时间myss37ts1#
只要具有相同组id的kafka消费者加入组或离开组,就会触发消费者再平衡。退出使用者组可以通过关闭使用者连接来显式完成,或者在jvm或服务器崩溃时通过超时来完成。
所以在你的例子中,是的,消费者的滚动重启将触发115次消费者再平衡。在Kafka开始重新平衡之前没有“门槛”或“等待期”。
2izufjch2#
默认情况下,使用rangeassignor.java-这可能会导致即使是健康的使用者在其他节点发生问题时也会一次又一次地将不同的分区分配给他们。这也可能意味着分区将从健康的消费者那里取走。您可以对其进行调整,使其使用不同的
PartitionAssignor
接口-例如stickyassignor.java“stickyassignor的一个优点是,一般来说,它减少了在重新分配期间实际从一个使用者移动到另一个使用者的分区数”。我也建议你读书https://medium.com/@anyili0928/what-我从Kafka那里学到了分区分配策略799fdf15d3ab如果你想深入了解它是如何工作的