温馨提示×

如何优化Ubuntu的Kafka

小樊
40
2026-08-02 15:18:16
栏目: 智能运维

在 Ubuntu 上优化 Kafka,通常从 系统层、JVM 层、Kafka 配置层、磁盘与网络层 四个方面入手。下面给你一套实战型优化清单,适合生产环境,也适合你做性能调优或压测。


一、系统层优化(Ubuntu / Linux)

1. 文件系统与磁盘

推荐使用 XFS 或 ext4(XFS 更优)

mkfs.xfs /dev/sdX

挂载参数优化

mount -o noatime,nodiratime,data=writeback /dev/sdX /data/kafka

建议写入 /etc/fstab

/dev/sdX /data/kafka xfs noatime,nodiratime 0 0

磁盘尽量用多块盘

log.dirs=/data/kafka1,/data/kafka2,/data/kafka3

2. 操作系统参数(非常重要)

文件句柄

ulimit -n

建议至少:

ulimit -n 1000000

永久生效:

# /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000

内核参数

编辑 /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_max_syn_backlog=4096

生效:

sysctl -p

二、JVM 优化(Kafka 是 JVM 应用)

1. 堆内存设置(关键)

不要太大,避免 GC 停顿

export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G"

经验值:

  • 小集群:4–8G
  • 中大型:8–16G

⚠️ 不要超过物理内存的 50%


2. 垃圾回收器(推荐 G1)

export KAFKA_JVM_PERFORMANCE_OPTS="
-XX:+UseG1GC
-XX:MaxGCPauseMillis=20
-XX:InitiatingHeapOccupancyPercent=35
"

三、Kafka Broker 核心参数优化

编辑 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

2. 日志与刷盘优化(重点)

不要频繁刷盘

log.flush.interval.messages=10000
log.flush.interval.ms=1000

段文件大小

log.segment.bytes=1073741824

保留策略

log.retention.hours=72
log.retention.bytes=-1

3. 副本与一致性

default.replication.factor=3
min.insync.replicas=2
unclean.leader.election.enable=false

4. 请求与吞吐

queued.max.requests=500
num.replica.fetchers=4

四、Producer & Consumer 优化

Producer

acks=1                  # 高吞吐
compression.type=lz4    # 或 zstd
batch.size=32768
linger.ms=5
buffer.memory=67108864

Consumer

fetch.min.bytes=1024
fetch.max.bytes=52428800
max.poll.records=500

五、网络与监控

1. 关闭反向 DNS(加快连接)

host.name=<IP>

2. 使用监控工具

✅ 必备:

  • Kafka Exporter + Prometheus + Grafana
  • JMX(jconsole / visualvm)

重点监控:

  • UnderReplicatedPartitions
  • RequestHandlerAvgIdlePercent
  • NetworkProcessorAvgIdlePercent
  • GC Time

六、常见性能问题排查

问题 原因 解决
写入慢 磁盘 IO 多盘 + 顺序写
延迟高 GC 减小堆 + G1
消费慢 fetch 参数 调大 batch
CPU 高 线程少 增加 io/network threads

七、推荐典型配置(8C16G 机器)

num.network.threads=8
num.io.threads=16
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
log.flush.interval.messages=10000
default.replication.factor=3

JVM:

-Xms8G -Xmx8G -XX:+UseG1GC

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

  • Kafka 版本
  • 机器配置(CPU / 内存 / 磁盘)
  • 高吞吐 还是 低延迟
  • 是否上生产

我可以给你一份 针对你环境的定制优化方案

0