在 Ubuntu 上部署 Kafka 出现卡顿 / 延迟高 / 吞吐上不去,通常不是 Kafka 本身的问题,而是系统配置、磁盘 IO、JVM 或网络引起的。下面按最常见原因给你一个排查清单。
Kafka 是顺序写磁盘,但对磁盘吞吐要求很高。
排查:
iostat -x 1
看:
%util 是否接近 100%await 是否很高(>10ms 就偏慢)建议:
log.dirs 不要放在 / 根分区❌ 错误示例:
log.dirs=/tmp/kafka-logs
✅ 建议:
log.dirs=/data/kafka/logs
多个磁盘可逗号分隔:
log.dirs=/data1/kafka,/data2/kafka
Kafka 会打开大量文件。
查看:
ulimit -n
修改:
sudo vim /etc/security/limits.conf
kafka soft nofile 100000
kafka hard nofile 100000
Kafka 不应使用 swap。
cat /proc/sys/vm/swappiness
建议设为 1:
sudo sysctl -w vm.swappiness=1
永久:
echo "vm.swappiness=1" | sudo tee -a /etc/sysctl.conf
Ubuntu 默认脏页刷新太慢,会导致突发卡顿。
sudo sysctl -w vm.dirty_background_ratio=5
sudo sysctl -w vm.dirty_ratio=10
❌ 堆太大(>8G)会导致 GC 卡顿
✅ 推荐:
export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G"
不要超过物理内存的 50%
Kafka 3.x 默认 G1GC 是 OK 的,但老版本可显式指定:
-Xms4G -Xmx4G -XX:+UseG1GC
num.network.threads=8
num.io.threads=16
CPU 核数多就加
如果是 3 副本:
min.insync.replicas=2acks=all在磁盘慢时会非常卡
临时测试:
acks=1
单 partition 吞吐有限。
kafka-topics.sh --describe
建议:
ethtool eth0
检查:
# 生产压测
kafka-producer-perf-test.sh \
--topic test \
--num-records 1000000 \
--record-size 1024 \
--throughput -1 \
--producer-props bootstrap.servers=localhost:9092
# 消费压测
kafka-consumer-perf-test.sh \
--topic test \
--bootstrap-server localhost:9092 \
--messages 1000000
如果你愿意,可以贴一下:
iostat / top 输出我可以直接帮你精确定位是哪一层卡住。