Kafka 在 Linux 上的调优通常从 操作系统、JVM、Kafka 本身、磁盘与网络 几个层面来做。下面按实战优先级给你一份“可用版”调优清单。
Kafka 会打开大量文件和网络连接。
# 查看
ulimit -n
# 修改(/etc/security/limits.conf)
* soft nofile 1000000
* hard nofile 1000000
重启会话或 Kafka 生效。
# 尽量不使用 swap
vm.swappiness = 1
修改:
sysctl -w vm.swappiness=1
echo "vm.swappiness=1" >> /etc/sysctl.conf
Kafka 依赖顺序写盘,适当增大脏页:
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
net.core.somaxconn = 4096
net.core.netdev_max_backlog = 4096
net.ipv4.tcp_max_syn_backlog = 4096
mount -o noatime,nodiratime,discard /dev/sdb /kafka
# 每个 broker 的线程数(CPU 核数)
num.network.threads=8
num.io.threads=16
# 日志刷盘策略(性能优先)
log.flush.interval.messages=10000
log.flush.interval.ms=1000
# 副本拉取
replica.fetch.max.bytes=1048576
replica.fetch.wait.max.ms=500
# 消息大小
message.max.bytes=10485760
log.retention.hours=72
log.segment.bytes=1073741824
export KAFKA_HEAP_OPTS="-Xms6g -Xmx6g"
export KAFKA_JVM_PERFORMANCE_OPTS="
-XX:+UseG1GC
-XX:MaxGCPauseMillis=20
-XX:InitiatingHeapOccupancyPercent=35
"
⚠️ 经验:
acks=1
batch.size=16384
linger.ms=5
compression.type=snappy
fetch.min.bytes=1024
fetch.max.wait.ms=500
max.poll.records=500
必须看:
工具:
iostat -x 1Kafka 调优核心:少 GC、多 cache、顺序写、网络稳、磁盘快
如果你愿意,可以告诉我:
我可以直接给你一套 可落地的参数模板。