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消费者从 broker 拉取数据时的最小数据量,默认值为 1。
fetch.max.wait.ms消费者从 broker 拉取数据时的最大等待时间,默认值为 500。

禁用消息压缩

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

参数说明
compression.type可选值包括 uncompressedzstdlz4snappygzipproducer

避免频繁 GC

为确保 Kafka 的性能和稳定性,应关注 JVM 的 GC(垃圾回收)性能。频繁的 GC 会增加 CPU 负载。因此,建议合理配置 Kafka broker 的 JVM 参数,优化垃圾回收策略,提高性能,减少 GC 频率。

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

Broker 扩容

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