| 参数 | 全名 | 主要负责 | 处理的内容 |
|---|---|---|---|
| num.network.threads | Network Threads | 网络层线程 | 接收/发送请求的网络读写(Socket I/O) |
| num.io.threads | IO Threads | 逻辑处理线程 | 执行实际的请求逻辑:读写磁盘、处理生产消费请求、协调器逻辑等 |
🔍 详细解释
1.num.network.threads
-
作用:处理网络 I/O(不是磁盘 I/O)
- 接收客户端请求(Producer、Consumer、AdminClient…)
- 将响应写回客户端
-
特点:
- 不做复杂逻辑,只负责把数据读取出来后交给 IO 线程处理
- 通常数量不需要太大(默认 3)
类比:前台接待员,负责把客人(请求)接进来并安排给后台处理。
2.num.io.threads
-
作用:执行真正的业务逻辑,包括:
- 处理生产(Produce)请求
- 处理消费(Fetch)请求
- 写入磁盘日志(Log)
- 检查 ISR、副本同步逻辑
- leader/follower 选举相关操作
- 元数据处理
-
特点:
- 逻辑很重、涉及磁盘 I/O 和 CPU 运算
- 数量一般远大于 network threads(默认 8)
类比:后台员工,负责真正干活(写硬盘、处理消息、同步数据等)。
🧠 什么时候要调整?
调整 num.network.threads 的场景
- 有大量连接(上千 producer/consumer)
- 发现 Socket 请求排队,网络层出现瓶颈
通常只需:
num.network.threads = CPU核心数 * 0.5
调整 num.io.threads 的场景
- 吞吐高(百万级消息)
- Broker 磁盘写入压力大
- 处理逻辑排队
通常设置:
num.io.threads = CPU核心数 或略高
🏁 最终一句话总结
- num.network.threads:负责网络通信
- num.io.threads:负责处理请求和磁盘操作
一个是“接待员”,一个是“干活的员工”。