温馨提示×

kafka linux怎么调优

小樊
35
2026-10-08 05:46:28
栏目: 智能运维

Kafka 在 Linux 上的调优通常从 操作系统、JVM、Kafka 本身、磁盘与网络 几个层面来做。下面按实战优先级给你一份“可用版”调优清单。


一、Linux 操作系统调优

1. 文件描述符(非常重要)

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

# 查看
ulimit -n

# 修改(/etc/security/limits.conf)
* soft nofile 1000000
* hard nofile 1000000

重启会话或 Kafka 生效。


2. 虚拟内存(避免频繁 swap)

# 尽量不使用 swap
vm.swappiness = 1

修改:

sysctl -w vm.swappiness=1
echo "vm.swappiness=1" >> /etc/sysctl.conf

3. 脏页(disk flush)调优

Kafka 依赖顺序写盘,适当增大脏页:

vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

4. 网络参数

net.core.somaxconn = 4096
net.core.netdev_max_backlog = 4096
net.ipv4.tcp_max_syn_backlog = 4096

二、磁盘与文件系统

1. 使用独立磁盘

  • Kafka 日志盘 单独挂载
  • 不要用 RAID 5(写性能差)
  • 推荐:多块 SATA/NVMe 盘 + JBOD

2. 文件系统

  • 推荐:ext4 / xfs
  • 挂载参数示例:
mount -o noatime,nodiratime,discard /dev/sdb /kafka

三、Kafka Broker 调优

1. server.properties 关键参数

# 每个 broker 的线程数(CPU 核数)
num.network.threads=8
num.io.threads=16

# 日志刷盘策略(性能优先)
log.flush.interval.messages=10000
log.flush.interval.ms=1000

# 副本拉取
replica.fetch.max.bytes=1048576
replica.fetch.wait.max.ms=500

# 消息大小
message.max.bytes=10485760

2. 分区与副本

  • 分区数 ≈ 消费者并发数 × 2~3
  • 不建议单 broker 超 2000+ 分区
  • 副本数一般 3

3. 日志保留

log.retention.hours=72
log.segment.bytes=1073741824

四、JVM 调优(重点)

推荐配置(堆不要太大)

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

⚠️ 经验:

  • 堆 不要超过 8G
  • 剩下的内存留给 page cache(Kafka 靠它)

五、生产 / 消费端调优

Producer

acks=1
batch.size=16384
linger.ms=5
compression.type=snappy

Consumer

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

六、监控(调优前提)

必须看:

  • CPU / IO wait
  • 磁盘吞吐
  • page cache 命中率
  • request latency
  • under-replicated partitions

工具:

  • Kafka Manager / CMAK
  • Prometheus + Grafana
  • iostat -x 1

七、一句话总结

Kafka 调优核心:少 GC、多 cache、顺序写、网络稳、磁盘快

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

  • 机器配置(CPU / 内存 / 磁盘)
  • 消息量(QPS)
  • 延迟要求

我可以直接给你一套 可落地的参数模板。

0 踩