在 Ubuntu 上部署 Kafka 时,性能调优通常涉及操作系统、JVM、Kafka Broker 配置、磁盘与网络几个方面。下面按层级给你一套实用调优思路(以 Kafka 3.x + Ubuntu 20.04/22.04 为例)。
Kafka 会打开大量文件和网络连接。
# 查看
ulimit -n
# 修改(永久)
sudo vim /etc/security/limits.conf
* soft nofile 100000
* hard nofile 100000
swap 会严重拖慢 Kafka。
sudo swapoff -a
永久禁用:
sudo sed -i '/swap/s/^/#/' /etc/fstab
建议使用 ext4 或 xfs,并挂载为 noatime:
sudo mount -o remount,noatime /data
/etc/fstab 示例:
/dev/sdb1 /data xfs defaults,noatime 0 0
sudo vim /etc/sysctl.conf
net.core.somaxconn = 4096
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
sudo sysctl -p
server.properties 示例:
log.dirs=/data1/kafka-logs,/data2/kafka-logs
一般规则:
export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G"
Kafka 官方推荐 G1GC:
export KAFKA_JVM_PERFORMANCE_OPTS="
-Xms4G -Xmx4G
-XX:+UseG1GC
-XX:MaxGCPauseMillis=20
-XX:InitiatingHeapOccupancyPercent=35
"
server.properties)# 网络线程
num.network.threads=8
# IO 线程(通常 = 磁盘数 * 2)
num.io.threads=16
# 单个 socket 缓冲区
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
不要频繁刷盘(依赖 OS page cache):
# 默认即可,不建议改小
log.flush.interval.messages=10000
log.flush.interval.ms=1000
# 更激进吞吐(接受少量风险)
log.flush.scheduler.interval.ms=3000
num.partitions=6
default.replication.factor=3
min.insync.replicas=2
分区数 ≈ 消费者并发数 × 2~3
compression.type=snappy
# 或 zstd(CPU 充足时)
acks=1
batch.size=64KB
linger.ms=5~20
compression.type=snappy
buffer.memory=64MB
高吞吐示例:
acks=1
batch.size=131072
linger.ms=10
fetch.min.bytes=1MB
fetch.max.wait.ms=500
max.poll.records=500
# 生产
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
| 场景 | 建议 |
|---|---|
| 高吞吐 | 大 batch + linger + 多分区 |
| 低延迟 | acks=1 + 少 linger |
| 强一致 | acks=all + min.insync=2 |
| 单机压测 | 关副本、单分区 |
如果你愿意,可以告诉我:
我可以直接帮你给一份可直接用的 server.properties 配置。