Kafka 内存配置优化指南
一 核心原则
二 JVM 堆与 GC 设置
export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G";或在环境变量中设置 KAFKA_HEAP_OPTS="-Xms4G -Xmx4G"。容器场景可通过环境变量(如 KAFKA_JVM_OPTS 或 KAFKA_HEAP_OPTS)注入。堆大小建议固定为相同值(如 -Xms == -Xmx)以避免运行期扩缩堆带来的抖动。-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35。G1 更适合大堆、低停顿与并发场景,有助于控制 Full GC 风险。docker run ... -e KAFKA_HEAP_OPTS="-Xmx4G" ... 并在 Compose 中设置 deploy.resources.limits.memory;堆上限务必小于容器内存限制,为 Page Cache 留出余量。三 Broker 与操作系统关键参数
num.network.threads:建议约为 CPU 核数 × 1,处理网络读写与请求解析。num.io.threads:建议约为 CPU 核数 × 2(最大不超过 ×3),处理磁盘 I/O。socket.send.buffer.bytes / socket.receive.buffer.bytes:建议设置为 1MB 左右,提高高吞吐网络下的 socket 缓冲能力。log.flush.interval.messages/ms 强制刷盘,可靠性应更多依赖 副本机制;强制刷盘会显著影响吞吐。可通过操作系统参数优化脏页回写:适度降低 vm.dirty_background_ratio、提高 vm.dirty_ratio,并适当增大 vm.dirty_expire_centisecs(如 15000 厘秒),在保证一致性的前提下减少抖动与写放大。log.segment.bytes:建议 1GB 或更大,减少文件数量、加快启动与恢复。log.retention.hours:依据业务与合规设置(如 72 小时),避免无谓占用磁盘与 Page Cache。四 Producer 与 Consumer 内存与批量
buffer.memory:总发送缓冲池大小,按并发度与峰值吞吐规划,避免过大挤占堆空间。batch.size 与 linger.ms:适度增大可提升批处理与吞吐,但会增加单批延迟与内存占用;需结合目标延迟与带宽做权衡。fetch.min.bytes 与 fetch.max.wait.ms:提高每次拉取的最小字节与等待时间,增加批拉取命中与吞吐,减少网络往返与堆压力。五 容量规划与监控落地