Kafka Streams在重新分区上的线程数

时间:2019-03-25 14:52:39

标签: apache-kafka apache-kafka-streams

我有一个Kafka Streams应用程序,它从5个分区的一个Kafka主题中读取内容。

然后几次对数据进行聚合/重新分区。

在这种情况下,我试图找到有关线程数量的建议,但是很难理解。 documentation写道:

  

您可以启动与输入相同数量的应用程序线程   Kafka主题分区

在我的情况下,这意味着5个线程是有效线程的最大数量。

但是this blog声称重新分区使最大有效线程数增加了一倍:

  

...使用相同的主题自动创建   分区数作为源主题,这意味着我们的应用程序是   现在从具有8个线程的16个分区中读取数据,从而创建了某种   争执。

这对我来说也是合理的,因为Kafka Streams也必须阅读其创建的内部主题。

那么,有效线程的最大数量是5个分区还是5 *(重新分区)?

1 个答案:

答案 0 :(得分:2)

您可以启动任意多个线程。但是,仅将使用一定数量的线程,而所有其他线程将处于空闲状态。

  

使用的最大线程数是创建的任务数。

将拓扑划分为子拓扑,每个子拓扑的输入主题分区的数量决定了每个子拓扑创建的任务数。如果配置备用任务,那么您还将获得可以利用线程的其他任务。

通常,很难预先知道Kafka Streams创建了多少个任务。您可以通过Topology#describe()获取子拓扑。如果所有主题的分区数量相同,则任务数将为#numPartition * #numSubTopoogies

文档被有意简化了,因为确切的任务数量很难确定,因为存在许多依赖关系。而且,通常每个任务不需要线程,并且凭经验可以开始使用。