KafkaStreams应用程序具有Java线程开销

时间:2019-03-22 07:21:05

标签: apache-kafka apache-kafka-streams

具有消耗和经过一些处理步骤后的KafkaStreams拓扑的结果会传到另一个kafka主题,并配置为:

num.stream.threads: 10

JConsole表示有20个使用者线程,20个生产者线程,20个心跳信号线程。

为什么这样的线程数是20,而不是10?在有大量num.stream.threads的情况下,这似乎是一笔巨大的开销-在生产中,我们已配置64个,并且有400多个Java本机线程。

2 个答案:

答案 0 :(得分:0)

每个StreamThread(通过num.stream.threads进行配置),创建使用者,还原使用者(可能是全球使用者)和一个生产者(如果禁用了“仅一次处理”);请启用一次处理,甚至创建了更多生产者。

每个消费者客户端启动心跳后台线程。每个生产者客户端都启动一个后台发送者线程。这就是为什么您看到更多线程的原因。

答案 1 :(得分:0)

我发现了线程数加倍的原因。我们使用spring-kafka StreamsBuilderFactoryBean创建了KafkaStream,后者在后台创建了KafkaStream。删除后,线程数已除以2。