在 Debian 上部署和调优 Kafka 时,需要从 操作系统、JVM、Kafka 自身配置、磁盘与网络 等多个层面综合考虑。下面给你一套比较系统、实战向的调优建议。
Kafka 是大量使用文件和网络连接的,必须调大。
# 查看当前限制
ulimit -n
# 永久修改(推荐)
sudo vim /etc/security/limits.conf
添加:
* soft nofile 1000000
* hard nofile 1000000
root soft nofile 1000000
root hard nofile 1000000
并确认:
sudo vim /etc/systemd/system.conf
DefaultLimitNOFILE=1000000
重启后生效。
Kafka 对延迟非常敏感,swap 会导致 GC 停顿。
sudo swapoff -a
永久禁用(注释 /etc/fstab 中的 swap 行)。
推荐:
mount -o noatime,nodiratime,data=writeback /dev/sdX /data
/etc/fstab 示例:
/dev/sdX /data ext4 noatime,nodiratime 0 0
sudo vim /etc/sysctl.conf
推荐配置:
vm.swappiness = 1
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
net.core.somaxconn = 4096
net.core.netdev_max_backlog = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
生效:
sudo sysctl -p
Kafka 是 JVM 应用,GC 性能直接影响吞吐和延迟。
一般 Kafka 堆内存 不建议超过 6~8GB(防止 GC 停顿)。
示例(kafka-server-start.sh 或 systemd 中设置):
export KAFKA_HEAP_OPTS="-Xms6g -Xmx6g"
export KAFKA_JVM_PERFORMANCE_OPTS="
-XX:+UseG1GC
-XX:MaxGCPauseMillis=20
-XX:ParallelGCThreads=4
-XX:ConcGCThreads=2
"
如果是高吞吐场景:
-Xmxserver.properties 关键配置broker.id=1
num.network.threads=8
num.io.threads=16
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/data/kafka-logs
num.partitions=3
default.replication.factor=2
log.flush.interval.messages=10000
log.flush.interval.ms=1000
⚠️ 不建议频繁 flush,Kafka 依赖 OS page cache
num.replica.fetchers=4
replica.lag.time.max.ms=30000
linger.ms=5
batch.size=32768
acks=1 # 高吞吐
compression.type=lz4 # 或 snappy
batch.size=65536
linger.ms=10
fetch.min.bytes=1
fetch.max.bytes=52428800
max.poll.records=500
| 场景 | 建议 |
|---|---|
| 低延迟 | NVMe / SSD |
| 高吞吐 | RAID10 |
| 数据安全 | replication,而不是 RAID |
⚠️ Kafka 不推荐 RAID5
kafka-run-class kafka.tools| 问题 | 原因 |
|---|---|
| 延迟高 | swap、GC、磁盘慢 |
| 吞吐低 | partition 太少、producer batch 小 |
| OOM | 堆太大、page cache 被挤 |
| leader 频繁切换 | GC 停顿 |
✅ Debian 上 Kafka 调优重点:
如果你愿意,我可以:
只要告诉我你的场景即可。