在 Debian 上“调 Kafka”一般分几层:系统/OS 调优、Kafka 配置调优、JVM 调优、Topic/生产消费调优。下面给你一套实战向的 Debian + Kafka 调优清单(以 Kafka 3.x 为例,适用于自建部署,不是托管的)。
Kafka 非常吃 fd。
# 查看
ulimit -n
# 修改
sudo vim /etc/security/limits.conf
kafka soft nofile 100000
kafka hard nofile 100000
并确认 PAM 生效:
/etc/pam.d/common-session
session required pam_limits.so
Kafka 对延迟敏感。
sudo swapoff -a
或:
sysctl vm.swappiness=1
cat /sys/block/sdX/queue/scheduler
SSD:
echo none > /sys/block/sdX/queue/scheduler
推荐:
ext4 或 xfsdefaults,noatime,nodiratime
配置文件:/opt/kafka/config/server.properties
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=6
default.replication.factor=3
min.insync.replicas=2
log.dirs=/data/kafka1,/data/kafka2
log.retention.hours=72
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.flush.interval.messages=10000
log.flush.interval.ms=1000
生产环境不建议频繁 flush,依赖 OS page cache 即可。
unclean.leader.election.enable=false
controller.socket.timeout.ms=30000
Kafka 是 JVM 应用。
/opt/kafka/bin/kafka-server-start.sh 或 KAFKA_HEAP_OPTS
export KAFKA_HEAP_OPTS="-Xms8g -Xmx8g"
export KAFKA_JVM_PERFORMANCE_OPTS="
-server
-XX:+UseG1GC
-XX:MaxGCPauseMillis=20
-XX:InitiatingHeapOccupancyPercent=35
-XX:+ExplicitGCInvokesConcurrent
"
不要设太大堆,留内存给 page cache。
acks=all
retries=5
batch.size=65536
linger.ms=5
compression.type=lz4
buffer.memory=67108864
fetch.min.bytes=1024
fetch.max.wait.ms=500
max.poll.records=500
# Kafka 自带
kafka-topics.sh --describe
# 系统
iostat -x 1
vmstat 1
dmesg | tail
推荐监控:
如果你愿意,可以告诉我:
我可以直接给你一份可用的 server.properties 模板。