温馨提示×

Ubuntu Kafka如何调性能

小樊
43
2026-07-07 12:09:27
栏目: 智能运维

在 Ubuntu 上部署和调优 Kafka 性能,通常从 操作系统、JVM、Kafka 配置、磁盘与网络、生产/消费端 五个层面入手。下面给你一套实战向的调优清单,适合生产环境。


一、操作系统层面(Ubuntu)

1. 文件系统与磁盘

使用 ext4 或 xfs(推荐 xfs)

mkfs.xfs /dev/sdb
mount -o noatime,nodiratime /dev/sdb /data/kafka

避免:

  • atime 更新
  • 使用 RAID5(写放大)

磁盘建议

  • 多块盘做 JBOD(Kafka 原生支持)
  • Kafka 数据目录分散到不同磁盘
log.dirs=/data1/kafka,/data2/kafka

2. 系统参数调优

文件描述符

ulimit -n

建议:

* soft nofile 1000000
* hard nofile 1000000

vm.swappiness

sysctl vm.swappiness=1

页缓存

Kafka 强依赖 Page Cache,不要禁用 swap 到 0


3. 网络参数

sysctl -w net.core.somaxconn=4096
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
sysctl -w net.core.netdev_max_backlog=16384

二、JVM 调优(非常重要)

推荐 JVM

  • JDK 11 / 17(LTS)
  • G1 GC(Kafka 官方推荐)

JVM 参数示例(32G 内存机器)

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

⚠️ 注意:

  • 不要超过 32G(避免压缩指针失效)
  • 不要给 Kafka 全部内存(留给 Page Cache)

三、Kafka Broker 核心参数调优

1. 基础性能参数

# 网络线程
num.network.threads=8

# IO 线程(建议 = 磁盘数 * 2)
num.io.threads=16

# 后台线程
background.threads=10

# socket buffer
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600

2. 日志 & 磁盘

# 日志段大小
log.segment.bytes=1073741824

# 刷盘策略(依赖 OS 缓存,不建议频繁 flush)
log.flush.interval.messages=10000000
log.flush.interval.ms=60000

# 保留策略
log.retention.hours=72
log.retention.bytes=-1

不要开启频繁 flush,Kafka 设计就是靠 OS 缓存


3. 副本 & ISR

num.replica.fetchers=4
replica.lag.time.max.ms=30000

4. 请求处理

queued.max.requests=500
fetch.purgatory.purge.interval.requests=1000
producer.purgatory.purge.interval.requests=1000

四、生产端(Producer)调优

关键参数

acks=1             // 0:最快,1:平衡,all:最安全
compression.type=lz4
batch.size=32768
linger.ms=5
buffer.memory=67108864

✅ 推荐组合:

  • 吞吐量优先:acks=1 + lz4
  • 可靠性优先:acks=all + retries

五、消费端(Consumer)调优

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

消费逻辑:

  • 避免消费线程阻塞
  • 消费 → 提交 offset → 再处理

六、监控 & 验证

1. 必须监控的指标

  • UnderReplicatedPartitions
  • RequestHandlerAvgIdlePercent
  • NetworkProcessorAvgIdlePercent
  • Disk / Page Cache 使用率

2. 工具

kafka-topics --describe
kafka-consumer-groups --bootstrap-server localhost:9092 --describe

七、典型性能瓶颈对照表

现象 可能原因
吞吐上不去 IO 线程少 / 磁盘慢
CPU 高 压缩 / GC
延迟高 acks=all / 网络
OOM JVM 堆过大

八、推荐配置模板(8C16G 示例)

num.network.threads=8
num.io.threads=16
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
log.flush.interval.messages=10000000
log.retention.hours=72

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

  • Kafka 版本
  • 机器配置(CPU / 内存 / 磁盘)
  • 吞吐优先 还是 延迟优先

我可以直接给你一份 可复制的 server.properties 生产级配置

0