温馨提示×

如何调Debian的Kafka

小樊
40
2026-10-03 22:01:07
栏目: 智能运维

在 Debian 上“调 Kafka”一般分几层:系统/OS 调优、Kafka 配置调优、JVM 调优、Topic/生产消费调优。下面给你一套实战向的 Debian + Kafka 调优清单(以 Kafka 3.x 为例,适用于自建部署,不是托管的)。


一、Debian 系统层调优(很重要)

1. 文件描述符

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

2. 禁用 swap(或降低 swappiness)

Kafka 对延迟敏感。

sudo swapoff -a

或:

sysctl vm.swappiness=1

3. 磁盘 I/O 调度(SSD 推荐 none / mq-deadline)

cat /sys/block/sdX/queue/scheduler

SSD:

echo none > /sys/block/sdX/queue/scheduler

4. 文件系统

推荐:

  • ext4 或 xfs
  • 挂载选项:
defaults,noatime,nodiratime

二、Kafka 核心配置调优

配置文件:/opt/kafka/config/server.properties

1. 基础性能参数

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

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 即可。


3. 副本 & 可靠性

unclean.leader.election.enable=false
controller.socket.timeout.ms=30000

三、JVM 调优(非常关键)

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。


四、Producer / Consumer 调优

Producer

acks=all
retries=5
batch.size=65536
linger.ms=5
compression.type=lz4
buffer.memory=67108864

Consumer

fetch.min.bytes=1024
fetch.max.wait.ms=500
max.poll.records=500

五、监控 & 排查(Debian 上常用)

# Kafka 自带
kafka-topics.sh --describe

# 系统
iostat -x 1
vmstat 1
dmesg | tail

推荐监控:

  • broker 吞吐量
  • under-replicated partitions
  • request latency
  • GC 时间

六、常见“调不动”的原因

  1. 磁盘是 HDD → 换 SSD
  2. partition 太少 → 并行度不够
  3. consumer 太慢 → 不是 Kafka 问题
  4. 堆太大 → page cache 被挤掉

如果你愿意,可以告诉我:

  • Kafka 版本
  • 单机还是集群
  • 主要用途(日志 / 订单 / 实时流)
  • 当前瓶颈(吞吐 / 延迟 / 丢消息)

我可以直接给你一份可用的 server.properties 模板。

0 踩