首页 > 解决方案 > KafkaStreams 应用程序具有 Java 线程开销

问题描述

拥有 KafkaStreams 拓扑,该拓扑消耗并经过一些处理步骤产生结果到另一个 kafka 主题并配置:

num.stream.threads: 10

JConsole 说有 20 个消费者线程、20 个生产者线程、20 个心跳线程。

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

标签: apache-kafkaapache-kafka-streams

解决方案


每个StreamThread(通过配置num.stream.threads)创建一个消费者、恢复消费者(可能是全局消费者)和一个生产者(如果禁用“exactly-once processin”;其中启用exactly-once 处理,甚至会创建更多生产者)。

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


推荐阅读