代码之家  ›  专栏  ›  技术社区  ›  Balaji Katika

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

  •  1
  • Balaji Katika  · 技术社区  · 7 年前

    我的主题有115个分区和大约130个消费者。我预计115个消费者处于活动状态(1对1分配),其余15个消费者处于空闲状态。

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

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

    2 回复  |  直到 6 年前
        1
  •  2
  •   mjuarez    7 年前

    只要具有相同组ID的卡夫卡消费者加入或离开该组,就会触发消费者再平衡。退出使用者组可以通过关闭使用者连接来明确完成,如果JVM或服务器崩溃,也可以通过超时完成。

    所以在你的情况下,是的,消费者的滚动重启将触发115次消费者再平衡。在卡夫卡开始重新平衡之前,没有“门槛”或“等待期”。

        2
  •  0
  •   OneCricketeer Gabriele Mariotti    6 年前

    默认情况下 RangeAssignor.java -这可能会导致当其他节点发生问题时,即使是健康的消费者也会一次又一次地获得分配给他们的不同分区。这也可能意味着将从健康的消费者那里获取分区。您可以对其进行调整,使其使用不同的 PartitionAssignor 接口——例如 StickyAssignor.java " Stick assignor的一个优点是,一般来说,它减少了在重新分配期间实际从一个使用者移动到另一个使用者的分区数量 ".

    我还建议大家阅读 https://medium.com/@anyili0928/what-i-have-learned-from-kafka-partition-assignment-strategy-799fdf15d3ab 如果你想深入研究,它是如何工作的

    推荐文章