【发布时间】:2021-09-06 21:49:48
【问题描述】:
说,KStream 拓扑很简单:输入主题 -> 流程 -> 输出主题。输入主题的分区 = 4。
如果有单个应用实例以num.stream.threads=4 运行,则使用所有 4 个 StreamThread。
如果启动第二个实例(使用num.stream.threads=4),流任务现在在两者之间分配。第一个实例上的任务 0_1 和 0_2,第二个实例上的任务 0_3 和 0_4。
在第一个实例中,kafka 流库是否会杀死目前正在运行 0_3 和 0_4 的线程?
【问题讨论】:
-
Kafka-Streams 不会杀死空闲的流线程,线程仍在运行,但没有任何活动的分配任务。您可以从日志、VisualVM 等线程分析器或使用 kafka-consumer-groups 中看到。从日志中您可以看到以下内容:1) 对于分配了分区的线程:
Handle new assignment with: New active tasks: [0_1],2) 对于没有分配的线程 -Handle new assignment with: New active tasks: [] -
@VasylSarzhynskyi 是的,我得出了同样的结论,但我希望 Kafka 有一些策略可以稍后关闭它们。否则,随着更多实例的创建,空闲线程也会越来越多。这迫使开发人员随着实例数量的增加指定不同的线程数,这意味着应用程序必须了解环境。
-
我明白你的担忧,但对我来说,随着应用实例数量的增加更新
num.stream.threads(这是唯一的配置,无需更改代码)是合乎逻辑的
标签: apache-kafka apache-kafka-streams