kafka是否跨实例或线程平衡分区?

时间:2018-04-13 16:38:13

标签: apache-kafka apache-kafka-streams

假设我有一个多线程的kafkaStreams应用程序。它正在运行,并且所有分区都已分配,因此不会为任何线程分配超过1个分区。

现在这个应用程序上的CPU上升了,我的自动缩放器启动了另一个实例。我的新实例会被分配任何分区吗?或者kafka说,“我尽可能地将这些分区展开,感谢新实例,但是如果现有的实例崩溃,我只会使用它?”

假设答案是肯定的,是的,kafka不会重新平衡,有什么解决方案可以让kafka在各个实例之间取得平衡

1 个答案:

答案 0 :(得分:1)

假设您的CPU增加了,因为主题的吞吐量增加了,而不是因为主题的分区增加了。

在这种情况下,分区在同一consumer group的多个实例之间均匀分布。一般来说,<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button type='submit' class='checkBtn' name='checkBtn' id='checkBtn' value='apple'><i class='fa fa-check'></i></button> <button type='submit' class='checkBtn' name='checkBtn' id='checkBtn' value='linux'><i class='fa fa-check'></i></button> <button type='submit' class='checkBtn' name='checkBtn' id='checkBtn' value='windows'><i class='fa fa-check'></i></button>

如果您有比分区更多的可用线程,那么您将获得超额订阅。如果你有更少,那么一些线程将使用来自多个分区的循环方式。

如果主题分区确实增加了,那么您的线程就会以超过1:1的映射进行分配,并从多个分区中消耗。添加其他实例会重新平衡使用者组并分散负载。