apache-kafka - KafkaStreams 应用程序具有 Java 线程开销
问题描述
拥有 KafkaStreams 拓扑,该拓扑消耗并经过一些处理步骤产生结果到另一个 kafka 主题并配置:
num.stream.threads: 10
JConsole 说有 20 个消费者线程、20 个生产者线程、20 个心跳线程。
为什么这样的线程数是 20 而不是 10?在大量 num.stream.threads 的情况下,这似乎是一个巨大的开销——在生产中,我们配置了 64 个,并且有超过 400 个 Java 本地线程。
解决方案
每个StreamThread
(通过配置num.stream.threads
)创建一个消费者、恢复消费者(可能是全局消费者)和一个生产者(如果禁用“exactly-once processin”;其中启用exactly-once 处理,甚至会创建更多生产者)。
每个消费者客户端启动一个心跳后台线程。每个生产者客户端启动一个后台发送者线程。这就是为什么您会看到更多线程。
推荐阅读
- reactjs - 无法理解如何访问 redux 调度
- google-apps-script - Google Apps 脚本,摆脱复制/下载选项
- python - Python:如何解决 python opencv 的列表索引超出范围错误?
- kubernetes - 如何在 Kubernetes 中修改 continue 令牌的默认过期时间?
- php - 关联数组将值连接到另一个关联数组
- javascript - 切换主题的最佳方式?
- php - 如何使用php将一个变量变为多个变量?
- sql - 如何获取每一行的 top dept_id
- c++ - 同时在字符串数组中使用插入、删除和搜索时遇到问题
- c++ - 程序查找两个数字的乘积