温馨提示×

ubuntu kafka如何调优配置

小樊
43
2026-09-02 13:10:15
栏目: 智能运维

下面从 Ubuntu 上运行 Kafka(通常是 JVM 服务) 的角度,系统性地讲一下 Kafka 调优配置,分为:系统层、JVM 层、Kafka Broker 配置、Topic/Producer/Consumer 调优、监控与压测


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

1. 文件描述符限制

Kafka 会打开大量文件(日志段、索引)。

# 查看
ulimit -n

# 修改(临时)
ulimit -n 100000

# 永久(/etc/security/limits.conf)
kafka soft nofile 100000
kafka hard nofile 100000

2. 禁用 swap(非常重要)

swap 会导致 Kafka 延迟飙升。

sudo swapoff -a

永久禁用:注释 /etc/fstab 中的 swap 行

3. 磁盘 I/O 调度

建议使用 noopdeadline(SSD 推荐 noop)

cat /sys/block/sdX/queue/scheduler
echo noop | sudo tee /sys/block/sdX/queue/scheduler

4. 文件系统

  • 使用 ext4 / xfs
  • 挂载参数推荐:
defaults,noatime,nodiratime

5. 网络参数

# 增加端口范围
net.ipv4.ip_local_port_range = 1024 65535
# 增加 backlog
net.core.somaxconn = 4096

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

1. 堆内存

一般规则:

  • 不超过物理内存的 50%
  • 不超过 6–8GB(GC 压力)
# server.properties 同级
export KAFKA_HEAP_OPTS="-Xms6g -Xmx6g"

2. GC 选择(重要)

Kafka 2.x+ 推荐 G1GC

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

三、Kafka Broker 核心配置调优

(server.properties)

1. 日志 & 磁盘

log.dirs=/data/kafka-logs
num.partition=3
default.replication.factor=3
min.insync.replicas=2

2. 刷盘策略(性能 vs 安全)

高性能(允许少量丢失)

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

更强可靠

log.flush.scheduler.interval.ms=200

3. 网络线程

num.network.threads=8
num.io.threads=16

4. 请求队列

queued.max.requests=500

四、Topic / Producer / Consumer 调优

1. Topic 设计

  • partition 数 ≈ consumer 并发数
  • 单 partition 不要太大(< 50GB 好维护)
kafka-topics.sh --create \
--partitions 12 \
--replication-factor 3

2. Producer 调优

acks=1            # 高性能
# acks=all        # 高可靠
batch.size=16384
linger.ms=5
compression.type=snappy

3. Consumer 调优

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

五、副本 & 可靠性调优

unclean.leader.election.enable=false
min.insync.replicas=2

六、监控 & 压测(必做)

1. 监控

  • Kafka Exporter + Prometheus
  • JMX Exporter
  • 关键指标:
    • Under Replicated Partitions
    • Request Handler Idle
    • GC Time
    • Disk Util

2. 压测命令

# 生产
kafka-producer-perf-test.sh \
--topic test \
--num-records 1000000 \
--record-size 1024 \
--throughput -1

# 消费
kafka-consumer-perf-test.sh \
--topic test \
--messages 1000000

七、常见坑(Ubuntu 上)

❌ 用 root 跑 Kafka
✅ 用独立 kafka 用户

❌ 日志和 Zookeeper 放同一盘
✅ 分开磁盘

❌ 开 swap
✅ 关 swap


八、推荐起步配置(中等机器)

  • CPU:8 核
  • 内存:32G
  • 磁盘:SSD
  • Heap:6G
  • partition:6–12 / topic

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

  • Kafka 版本
  • 机器配置
  • 使用场景(日志 / 交易 / 实时流)

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

0