温馨提示×

kafka在ubuntu如何优化

小樊
36
2026-08-17 18:36:28
栏目: 智能运维

在 Ubuntu 上优化 Kafka,通常从 系统层、JVM 层、Kafka 配置层、磁盘与网络层 四个方面入手。下面给你一套生产环境常用、可落地的优化方案(适用于 Kafka 2.x / 3.x)。


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

1. 文件描述符限制

Kafka 会打开大量文件和网络连接。

# 查看当前限制
ulimit -n

# 修改(临时)
ulimit -n 1000000

永久生效:

sudo vim /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000

2. 禁用 swap(非常重要)

Kafka 对延迟非常敏感,swap 会导致 GC 停顿。

sudo swapoff -a

永久禁用:

sudo vim /etc/fstab
# 注释 swap 行

3. 文件系统建议

ext4 或 xfs(推荐 xfs)

挂载参数优化:

sudo vim /etc/fstab
defaults,noatime,nodiratime 0 0

生效:

sudo mount -o remount /data

4. 内核参数优化

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_max_syn_backlog=4096

生效:

sudo sysctl -p

二、磁盘优化(最关键)

1. 使用多块磁盘

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

✅ Kafka 会自动做 磁盘级别负载均衡


2. 磁盘类型

类型 建议
HDD ❌ 不推荐
SSD ✅ 推荐
NVMe ✅✅ 生产首选

三、JVM 优化

1. 推荐 JVM

  • JDK 11 / 17(长期支持)
  • 使用 G1 GC

2. JVM 参数(示例)

export KAFKA_HEAP_OPTS="-Xms8G -Xmx8G"
export KAFKA_JVM_PERFORMANCE_OPTS="
  -XX:+UseG1GC
  -XX:MaxGCPauseMillis=20
  -XX:ParallelGCThreads=8
  -XX:ConcGCThreads=4
"

不要超过物理内存的 50%


四、Kafka 关键参数优化

1. broker 配置(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

日志 & 磁盘

log.dirs=/data/kafka
log.retention.hours=168
log.segment.bytes=1073741824
log.cleanup.policy=delete
log.flush.interval.messages=10000
log.flush.interval.ms=1000

不要频繁 flush,让 OS 管理


副本 & ISR

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

吞吐优化

num.partitions=6
message.max.bytes=10485760
replica.fetch.max.bytes=10485760

五、Producer 优化(客户端)

props.put("batch.size", 32768);
props.put("linger.ms", 5);
props.put("compression.type", "lz4");
props.put("acks", "1"); // 或 "all"
props.put("buffer.memory", 67108864);

acks=1 吞吐高,acks=all 最安全


六、Consumer 优化

props.put("fetch.min.bytes", 1024);
props.put("fetch.max.bytes", 52428800);
props.put("max.poll.records", 500);

✅ 提高吞吐,减少 poll 次数


七、监控与压测

1. 必须监控

  • CPU / 内存 / 磁盘 IO
  • Kafka 指标:
    • UnderReplicatedPartitions
    • OfflinePartitions
    • RequestQueueSize
    • NetworkProcessorAvgIdlePercent

2. 压测工具

kafka-producer-perf-test.sh
kafka-consumer-perf-test.sh

八、常见错误 & 建议

❌ 把 Kafka 堆内存设得太大
❌ 开启过多 partition(>1000/节点)
❌ 使用 swap
❌ 单一磁盘
❌ 频繁 flush 日志

Kafka 的设计理念:依赖 OS Page Cache


九、场景化建议

场景 建议
高吞吐 SSD + 多磁盘 + G1GC
低延迟 禁用 swap + 少 partition
高可靠 acks=all + min.insync.replicas=2
大数据量 合理 retention + compaction

如果你愿意,我可以:

  • ✅ 给你一份 生产级 server.properties 模板
  • ✅ 根据你的 机器配置(CPU / 内存 / 磁盘)定制参数
  • ✅ 对比 Kafka vs RocketMQ / Pulsar

直接告诉我你的 机器配置和使用场景 即可。

0