Kafka 性能调优 Ubuntu 版攻略
一 硬件与操作系统基线
* soft nofile 65536、* hard nofile 65536net.core.somaxconn=65535、net.ipv4.tcp_max_syn_backlog=4096、net.ipv4.tcp_tw_reuse=1、net.ipv4.tcp_keepalive_time=600sysctl -p 使内核参数生效。vm.dirty_background_ratio、vm.dirty_ratio)按磁盘与负载压测微调。二 JVM 与内存设置
export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G -XX:+UseG1GC -XX:MaxGCPauseMillis=200"source /etc/profile.d/kafka.sh 生效,重启 Broker 观察 GC 日志与停顿。三 Kafka 关键配置建议
num.network.threads:处理网络请求的线程数,建议与 CPU 核数匹配或略高。num.io.threads:处理磁盘 I/O 的线程数,通常设置为磁盘数 ×(每盘队列深度/并发度)。socket.send.buffer.bytes / socket.receive.buffer.bytes:增大至 128KB–1MB,提升大消息与高吞吐场景的网络效率。socket.request.max.bytes:控制单请求上限,需 ≥ 生产端最大消息与副本抓取需求,避免请求被拒。batch.size:增大至 16KB–128KB,提升批处理效率。linger.ms:适度开启(如 5–20ms),配合批处理提升吞吐。compression.type:启用压缩(snappy / lz4 / zstd),在 CPU 允许下优先 lz4/zstd。acks:强一致选 all/-1;追求吞吐可权衡为 1(需配合 min.insync.replicas)。num.partitions:分区是并行度单位,通常应 ≥ 消费者线程数;过多分区会增加 Leader/Follower 负担与元数据开销。log.segment.bytes:适度增大(如 1GB–2GB),减少段切换与随机 I/O。log.retention.hours / log.retention.bytes:按磁盘容量与 SLA 设置保留策略,避免磁盘被占满。message.max.bytes 与 replica.fetch.max.bytes:确保端到端消息链路(生产/复制/消费)上限一致。四 生产者与消费者端调优
max.in.flight.requests.per.connection:acks=all 时建议 ≤ 5,既保吞吐又降低重排概率。fetch.min.bytes / fetch.max.wait.ms:提高每次拉取有效载荷,降低空轮询。poll(),将耗时处理放入线程池,防止再均衡时堆积。五 监控 维护与排错
lsof -i:<port> 查进程并 kill <pid>。log.retention.* 或扩容;清理过期日志。