下面从 Linux 系统层面 + Kafka 自身参数层面 给你一个比较实用的 Kafka 调优清单(偏生产环境)。
Kafka 大量使用文件和网络连接。
# 查看
ulimit -n
# 修改(/etc/security/limits.conf)
* soft nofile 100000
* hard nofile 100000
Kafka 启动用户也要生效。
Kafka 是 顺序写磁盘,但对 IOPS 仍敏感。
推荐:
ext4xfs(更好)挂载参数示例:
mount -o noatime,nodiratime,discard /dev/sdb /kafka
# 查看
cat /sys/block/sd*/queue/scheduler
# 推荐(SSD)
echo noop > /sys/block/sdb/queue/scheduler
# 或
echo none > /sys/block/sdb/queue/scheduler
# 尽量少用 swap
sysctl vm.swappiness=1
# /etc/sysctl.conf
net.core.somaxconn = 4096
net.core.netdev_max_backlog = 4096
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 600
sysctl -p
bin/kafka-server-start.sh 或 KAFKA_HEAP_OPTS
export KAFKA_HEAP_OPTS="-Xms8g -Xmx8g"
建议:
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
server.properties
# 不每次刷盘(靠 OS page cache)
log.flush.interval.messages=10000
log.flush.interval.ms=1000
# 段大小
log.segment.bytes=1073741824
default.replication.factor=3
min.insync.replicas=2
num.network.threads=8
num.io.threads=16
(根据 CPU 核数调整)
compression.type=snappy
# 或 lz4(性能更好)
acks=1 或 all
batch.size=16384 ~ 65536
linger.ms=5 ~ 20
compression.type=lz4
buffer.memory=67108864
fetch.min.bytes=1024
fetch.max.wait.ms=500
max.poll.records=500
消费逻辑要 快,避免阻塞。
Kafka 调优 = 足够内存 + 快磁盘 + 合理分区 + 不频繁刷盘 + 网络够宽
如果你能告诉我:
我可以给你一套 针对性参数模板。