3.4. 通过增加 I/O 线程改进请求处理吞吐量


网络线程处理对 Kafka 集群的请求,如生成并从客户端应用程序获取请求。生成请求放置在请求队列中。响应放置在响应队列中。

每个监听器的网络线程数量应该反映复制因素以及客户端制作者和与 Kafka 集群交互的用户的活动级别。如果您要有大量请求,您可以增加线程数量,使用时间线程数来确定何时添加更多线程。

要减少拥塞和规范请求流量,您可以限制请求队列中允许的请求数量。当请求队列已满时,所有传入的流量都会被阻断。

I/O 线程从请求队列获取请求来处理它们。添加更多线程可以提高吞吐量,但 CPU 内核和磁盘带宽的数量会带来实际的上限。至少,I/O 线程数量应该等于存储卷的数量。

# ...
num.network.threads=3 
1

queued.max.requests=500 
2

num.io.threads=8 
3

num.recovery.threads.per.data.dir=4 
4

# ...
Copy to Clipboard Toggle word wrap
1
Kafka 集群的网络线程数量。
2
请求队列中允许的请求数。
3
Kafka 代理的 I/O 线程数量。
4
用于日志加载的线程数量,并在关闭时清除。尝试至少将 设置为内核数。

所有代理的线程池的配置更新可能会在集群级别动态发生。这些更新仅限于当前大小为一半和当前大小的两倍。

提示

以下 Kafka 代理指标可帮助处理所需的线程数量:

  • kafka.network:type=SocketServer,name=NetworkProcessorAvgIdlePercent 在平均时间网络线程上提供指标作为百分比。
  • kafka.server:type=KafkaRequestHandlerPool,name=RequestHandlerAvgIdlePercent 提供平均时间 I/O 线程闲置的指标。

如果有 0% 空闲时间,则所有资源都使用,这意味着添加更多线程可能会很有用。当闲置时间低于 30% 时,性能可能会开始下降。

如果线程因为磁盘数量缓慢或限制,您可以尝试增加网络请求的缓冲区大小来提高吞吐量:

# ...
replica.socket.receive.buffer.bytes=65536
# ...
Copy to Clipboard Toggle word wrap

另外,增加 Kafka 可以接收的最大字节数:

# ...
socket.request.max.bytes=104857600
# ...
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat