在 Debian 下对 Kafka 进行调优,通常分为 操作系统层、JVM 层、Kafka Broker 配置、Topic/Producer/Consumer 调优、磁盘与网络 几个层面。下面给你一套比较系统、可落地的调优思路(以 Kafka 3.x / 2.8+ 为例,Debian 11/12 常见)。
Kafka 对 fd 消耗很大
# 查看
ulimit -n
# 修改(/etc/security/limits.conf)
kafka soft nofile 1000000
kafka hard nofile 1000000
kafka soft nproc 40960
kafka hard nproc 40960
⚠️ 如果用 systemd 启动,还需:
# /etc/systemd/system/kafka.service
[Service]
LimitNOFILE=1000000
LimitNPROC=40960
# 尽量不用 swap
sysctl vm.swappiness=1
/etc/sysctl.conf
vm.swappiness=1
vm.dirty_background_ratio=5
vm.dirty_ratio=10
net.core.somaxconn=4096
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_max_syn_backlog=8192
ext4 或 xfsmount -o noatime,nodiratime,discard /dev/sdb /kafka
Kafka 是 JVM 应用,但 不要给太大堆
KAFKA_HEAP_OPTS="-Xms6g -Xmx6g"
KAFKA_JVM_PERFORMANCE_OPTS="
-server
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=35
-XX:+ExplicitGCInvokesConcurrent
"
⚠️ 经验值:
/etc/kafka/server.properties# 每个 broker 唯一
broker.id=1
# 监听
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://kafka1:9092
# 日志目录(多盘分散)
log.dirs=/kafka/logs1,/kafka/logs2
# 默认分区 & 副本
num.partitions=6
default.replication.factor=3
min.insync.replicas=2
num.network.threads=8
num.io.threads=16
num.replica.fetcher.threads=4
CPU 核数多可适当增大
# 不让每条消息都刷盘
log.flush.interval.messages=10000
log.flush.interval.ms=1000
# 段大小
log.segment.bytes=1073741824
# 保留时间
log.retention.hours=72
log.retention.bytes=1099511627776
acks=all
unclean.leader.election.enable=false
kafka-topics.sh --create \
--topic order \
--partitions 12 \
--replication-factor 3 \
--config segment.bytes=1G \
--config retention.ms=259200000
原则:
acks=all
batch.size=65536
linger.ms=5
compression.type=lz4
buffer.memory=67108864
max.in.flight.requests.per.connection=5
目标:
fetch.min.bytes=1048576
fetch.max.wait.ms=500
max.poll.records=1000
避免:
Under Replicated PartitionsRequest Handler IdleMessages In / Out工具:
kafka-consumer-groups.sh| 问题 | 原因 | 解决 |
|---|---|---|
| 吞吐上不去 | 分区少 | 增加分区 |
| 延迟高 | linger.ms 大 | 调小 |
| CPU 高 | 压缩 | 换 lz4 |
| 磁盘忙 | 刷盘频繁 | 调大 flush |
| OOM | JVM 太大 | 减小堆 |
如果你愿意,可以告诉我:
我可以直接给你 一份可复制的 server.properties 调优模板。