Kafka 中的高 CPU 利用率

目录

并发控制

Kafka 在处理消息时使用线程池进行并发控制。适当配置线程池的大小可以充分利用 CPU 资源,避免 CPU 过载。

参数描述
num.network.threads处理网络请求的线程数,默认值为 3。适当地设置此参数可以调整 Kafka 处理网络请求的能力。
num.io.threads处理磁盘 I/O 的线程数,默认值为 8。适当地设置此参数可以调整 Kafka 处理磁盘 I/O 的能力。

消息批处理

Kafka 支持消息批处理,将多个消息组合成批,以减少网络和磁盘 I/O 的开销。批处理显著提高了 Kafka 的性能,并减少 CPU 的利用率。

参数描述
batch.size生产者端设置的消息批大小,单位为字节,默认值为 16384。适当地设置此参数可以提高 Kafka 的吞吐量。
linger.ms生产者端设置的消息等待时间,单位为毫秒,默认值为 0。在此期间消息将被合并成一个批。

消费者拉取策略

适当配置消费者的拉取策略可以降低 CPU 负载。

参数描述
fetch.min.bytes消费者从代理拉取数据时所需的最小数据量,默认值为 1。
fetch.max.wait.ms消费者从代理拉取数据时的最大等待时间,默认值为 500。

禁用消息压缩

消息压缩可以减少消息在存储和网络传输中占用的空间以及带宽消耗,但也会增加 CPU 负载。如果 CPU 资源有限,考虑禁用消息压缩以释放更多 CPU 资源。

参数描述
compression.type可选值包括 uncompressedzstdlz4snappygzipproducer

避免频繁的垃圾回收

为确保 Kafka 的性能和稳定性,需要注意 JVM 的垃圾回收(GC)性能。频繁的 GC 会增加 CPU 负载。因此,建议适当配置 Kafka 代理的 JVM 参数,以优化垃圾收集策略,提升性能,减少 GC 的频率。

spec:
   kafka:
     ...
     jvmOptions:
      '-Xms': 512m
      '-Xmx': 512m
     ...

Broker 扩展

为了提高集群的吞吐量和可用性,建议将新创建的主题分布到新的 Broker 上,以减少对单个 Broker 的连接数量。