下面从 Ubuntu 系统 + Kafka 部署 的角度,系统性地给你一份 Kafka 配置优化建议,分为 系统层、JVM 层、Kafka Broker 层、Producer/Consumer 层,适用于 生产环境。
Kafka 大量使用文件和网络连接。
# 查看当前限制
ulimit -n
# 修改限制
sudo vim /etc/security/limits.conf
添加:
* soft nofile 1000000
* hard nofile 1000000
root soft nofile 1000000
root hard nofile 1000000
并启用 PAM:
sudo vim /etc/pam.d/common-session
添加:
session required pam_limits.so
重启后生效。
Kafka 对延迟敏感,swap 会导致 GC 停顿。
sudo swapoff -a
永久禁用:
sudo vim /etc/fstab
# 注释 swap 行
✅ 推荐:
ext4(稳定)xfs(高吞吐,推荐)挂载参数建议:
sudo vim /etc/fstab
/dev/sdb1 /data/kafka xfs defaults,noatime,nodiratime 0 0
cat /sys/block/sda/queue/scheduler
建议:
echo deadline | sudo tee /sys/block/sda/queue/scheduler
java -version
编辑 Kafka 启动脚本:
vim /opt/kafka/bin/kafka-server-start.sh
或设置环境变量:
export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G"
export KAFKA_JVM_PERFORMANCE_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=20"
✅ G1 GC 推荐配置
-Xms4G
-Xmx4G
-XX:+UseG1GC
-XX:MaxGCPauseMillis=20
-XX:+DisableExplicitGC
⚠️ 不要设置 Xmx > 物理内存 50%
配置文件:
vim /opt/kafka/config/server.properties
# broker 唯一 ID
broker.id=1
# 监听地址
listeners=PLAINTEXT://:9092
# 日志目录(多磁盘可提升性能)
log.dirs=/data/kafka-logs
# 默认副本数
default.replication.factor=3
# 最小同步副本(保证数据安全)
min.insync.replicas=2
num.network.threads=8
num.io.threads=16
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
num.partitions=3
log.retention.hours=168
log.segment.bytes=1073741824
log.flush.interval.messages=10000
log.flush.interval.ms=1000
✅ 不建议频繁 flush Kafka 依赖 OS page cache,不要强制刷盘。
replica.lag.time.max.ms=10000
replica.fetch.max.bytes=1048576
num.network.threads=16
num.io.threads=32
log.retention.hours=72
log.segment.bytes=1G
default.replication.factor=3
min.insync.replicas=2
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "1"); // 0 > 1 > all
props.put("compression.type", "lz4");
props.put("batch.size", 16384); // 16KB
props.put("linger.ms", 5);
props.put("buffer.memory", 67108864);
✅ 推荐组合
acks=1compression=lz4linger.ms=5~10props.put("bootstrap.servers", "localhost:9092");
props.put("enable.auto.commit", false);
props.put("fetch.min.bytes", 1024);
props.put("fetch.max.bytes", 52428800);
props.put("max.poll.records", 500);
✅ 建议
max.poll.recordsbin/kafka-run-class.sh kafka.tools.JmxTool
| 项目 | 推荐 |
|---|---|
| CPU | 8+ 核 |
| 内存 | 16GB+ |
| 磁盘 | SSD / NVMe |
| 文件系统 | XFS |
| JVM | JDK 11/17 + G1GC |
| 副本 | 3 |
| min.insync.replicas | 2 |
server.properties你可以直接贴出你的 Kafka 版本 + server.properties。