具有消耗和经过一些处理步骤后的KafkaStreams拓扑的结果会传到另一个kafka主题,并配置为:
num.stream.threads: 10
JConsole表示有20个使用者线程,20个生产者线程,20个心跳信号线程。
为什么这样的线程数是20,而不是10?在有大量num.stream.threads的情况下,这似乎是一笔巨大的开销-在生产中,我们已配置64个,并且有400多个Java本机线程。
答案 0 :(得分:0)
每个StreamThread
(通过num.stream.threads
进行配置),创建使用者,还原使用者(可能是全球使用者)和一个生产者(如果禁用了“仅一次处理”);请启用一次处理,甚至创建了更多生产者。
每个消费者客户端启动心跳后台线程。每个生产者客户端都启动一个后台发送者线程。这就是为什么您看到更多线程的原因。
答案 1 :(得分:0)
我发现了线程数加倍的原因。我们使用spring-kafka StreamsBuilderFactoryBean创建了KafkaStream,后者在后台创建了KafkaStream。删除后,线程数已除以2。