在 Ubuntu 上调 Kafka 参数,通常分为系统层面(Linux/Ubuntu)、Kafka 服务端配置、JVM 参数和Topic / 生产者 / 消费者参数几部分。下面按实战角度给你一个比较完整的调优指南。
Kafka 对磁盘、网络、文件句柄敏感。
# 查看
ulimit -n
# 修改(临时)
ulimit -n 100000
# 永久(Ubuntu)
sudo vim /etc/security/limits.conf
添加:
* soft nofile 100000
* hard nofile 100000
sudo swapoff -a
永久禁用可注释 /etc/fstab 中 swap 行。
cat /sys/block/sdX/queue/scheduler
推荐:noop 或 mq-deadline
sudo vim /etc/sysctl.conf
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
vm.swappiness = 1
sudo sysctl -p
路径一般为:
/opt/kafka/config/server.properties
# 每个节点唯一
broker.id=0
# 监听
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://your-host:9092
# 日志目录(建议多盘)
log.dirs=/data/kafka/logs
# 线程数
num.network.threads=8
num.io.threads=16
# socket 缓冲
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
# 分段大小
log.segment.bytes=1073741824
# 保留时间
log.retention.hours=168
# 刷盘(高吞吐可放宽)
log.flush.interval.messages=10000
log.flush.interval.ms=1000
⚠️ Kafka 依赖 OS page cache,不要频繁刷盘
default.replication.factor=3
min.insync.replicas=2
unclean.leader.election.enable=false
export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G"
export KAFKA_JVM_PERFORMANCE_OPTS="
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=35
"
建议:
bin/kafka-topics.sh --create \
--topic test \
--partitions 12 \
--replication-factor 3 \
--config retention.ms=604800000 \
--bootstrap-server localhost:9092
常见调优:
acks=1
batch.size=16384
linger.ms=5
compression.type=snappy
buffer.memory=33554432
fetch.min.bytes=1024
fetch.max.wait.ms=500
max.poll.records=500
# 查看吞吐
bin/kafka-consumer-groups.sh --describe --group g1 --bootstrap-server localhost:9092
# 磁盘
iostat -x 1
# JVM
jstat -gcutil <pid> 1000
| 场景 | 建议 |
|---|---|
| 高吞吐 | 大 batch、snappy、多 partition |
| 低延迟 | 少 linger、acks=1 |
| 强可靠 | acks=all、min.insync=2 |
| 单机测试 | 单 broker、RF=1 |
如果你能告诉我:
我可以给你一套直接能用的参数模板。