【问题标题】:Kafka Streams number of threads, on repartition重新分区时的 Kafka Streams 线程数
【发布时间】:2019-03-26 13:25:52
【问题描述】:

我有一个 Kafka Streams 应用程序,从一个具有 5 个分区的 Kafka 主题中读取数据。

然后将数据聚合/重新分区数次。

我试图在这个场景中找到推荐的线程数,但很难理解。 documentation 写道:

您可以启动与输入一样多的应用程序线程 Kafka 主题分区

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

但是,this blog 声称重新分区会使最大有效线程数翻倍:

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

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

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

【问题讨论】:

    标签: apache-kafka apache-kafka-streams


    【解决方案1】:

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

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

    一个拓扑被分割成多个子拓扑,每个子拓扑的输入主题分区的数量决定了每个子拓扑创建的任务数量。如果您配置备用任务,您也会获得可以利用线程的其他任务。

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

    文档是有意简化的,因为存在许多依赖项,因此很难提前确定确切的任务数量。此外,通常每个任务不需要一个线程,并且经验法则足以开始。

    【讨论】:

    • 感谢您的回答。在文件系统中,我在 /tmp/kafka-streams/MY_APP/ 中有很多像 0_0 .. 9_4 这样的目录。这些目录的计数是任务数(以及因此使用的最大线程数)吗?
    • 是的。这些是任务目录。
    • 太棒了。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 2018-04-28
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多