在 Ubuntu 上部署和调优 Kafka 性能,通常从 操作系统、JVM、Kafka 配置、磁盘与网络、生产/消费端 五个层面入手。下面给你一套实战向的调优清单,适合生产环境。
✅ 使用 ext4 或 xfs(推荐 xfs)
mkfs.xfs /dev/sdb
mount -o noatime,nodiratime /dev/sdb /data/kafka
避免:
atime 更新✅ 磁盘建议
log.dirs=/data1/kafka,/data2/kafka
ulimit -n
建议:
* soft nofile 1000000
* hard nofile 1000000
sysctl vm.swappiness=1
Kafka 强依赖 Page Cache,不要禁用 swap 到 0
sysctl -w net.core.somaxconn=4096
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
sysctl -w net.core.netdev_max_backlog=16384
export KAFKA_HEAP_OPTS="-Xms16G -Xmx16G"
export KAFKA_JVM_PERFORMANCE_OPTS="-XX:+UseG1GC
-XX:MaxGCPauseMillis=20
-XX:InitiatingHeapOccupancyPercent=35"
⚠️ 注意:
# 网络线程
num.network.threads=8
# IO 线程(建议 = 磁盘数 * 2)
num.io.threads=16
# 后台线程
background.threads=10
# socket buffer
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
# 日志段大小
log.segment.bytes=1073741824
# 刷盘策略(依赖 OS 缓存,不建议频繁 flush)
log.flush.interval.messages=10000000
log.flush.interval.ms=60000
# 保留策略
log.retention.hours=72
log.retention.bytes=-1
✅ 不要开启频繁 flush,Kafka 设计就是靠 OS 缓存
num.replica.fetchers=4
replica.lag.time.max.ms=30000
queued.max.requests=500
fetch.purgatory.purge.interval.requests=1000
producer.purgatory.purge.interval.requests=1000
acks=1 // 0:最快,1:平衡,all:最安全
compression.type=lz4
batch.size=32768
linger.ms=5
buffer.memory=67108864
✅ 推荐组合:
fetch.min.bytes=1048576
fetch.max.bytes=52428800
max.poll.records=500
消费逻辑:
kafka-topics --describe
kafka-consumer-groups --bootstrap-server localhost:9092 --describe
| 现象 | 可能原因 |
|---|---|
| 吞吐上不去 | IO 线程少 / 磁盘慢 |
| CPU 高 | 压缩 / GC |
| 延迟高 | acks=all / 网络 |
| OOM | JVM 堆过大 |
num.network.threads=8
num.io.threads=16
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
log.flush.interval.messages=10000000
log.retention.hours=72
如果你愿意,可以告诉我:
我可以直接给你一份 可复制的 server.properties 生产级配置。