Kafka生产环境必须配置broker.id唯一、log.dirs指向独立SSD、default.replication.factor=3、min.insync.replicas=2,并调优Linux内核参数,否则易出现NotEnoughReplicasException、磁盘写满或消费者lag暴涨。

直接上结论:Kafka 在 Linux 上能跑起来不难,但要支撑高吞吐、低延迟、不丢消息的生产级场景,关键不在“装”,而在 broker.id、log.dirs、replication.factor 和内核参数这四点。漏掉任意一个,压测时大概率出现 NotEnoughReplicasException、磁盘写满卡死、或消费者 lag 爆涨。
Java 和 ZooKeeper/KRaft 模式怎么选
Kafka 3.3+ 默认仍带 ZooKeeper,但 Kafka 4.0 已彻底移除——你必须选 KRaft 模式。不过当前(2026 年)多数线上集群仍在用 ZooKeeper 模式,因为 KRaft 的运维工具链还不成熟。
所以实操建议:
- 新项目且用 Kafka ≥ 3.5,优先试
kafka-storage.sh format -t启动 KRaft 模式,跳过 ZooKeeper 安装-c config/kraft/server.properties - 已有系统或团队熟悉 ZooKeeper,就继续用它,但必须确保
zookeeper.properties中dataDir指向独立 SSD 分区(如/data/zk),不能和log.dirs共用同一块盘 - Java 必须是 JDK 11 或 17(OpenJDK),JDK 8 已被 Kafka 3.0+ 明确弃用;验证命令是
java -version输出含11.0.或17.0.
server.properties 关键配置项怎么填
默认配置只适合单机测试,一上生产就会出问题。重点改这五项:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
broker.id=1:每台 Broker 必须唯一,不能为 0(容易和测试环境冲突),建议用机器 IP 尾号或自增序列 -
log.dirs=/data/kafka-logs:必须指向有足够空间的独立 NVMe/SSD 路径,禁止用/tmp或根分区;多个路径用逗号分隔,可提升吞吐 -
num.partitions=12:Topic 默认分区数,建议设为 Broker 数 × 2~3,避免后续调大触发大量数据迁移 -
default.replication.factor=3:新建 Topic 自动副本数,配合min.insync.replicas=2使用,才能保证写入不丢 -
listeners=PLAINTEXT://0.0.0.0:9092和advertised.listeners=PLAINTEXT://:后者必须填真实内网 IP,不能用:9092 localhost或127.0.0.1,否则远程 Producer/Consumer 连不上
启动顺序和守护进程怎么保活
顺序错了会报 Connection refused 或 TimeoutException;裸奔启动会导致终端关闭后服务退出。
- ZooKeeper 模式:先启 ZooKeeper,再启 Kafka;KRaft 模式:只启 Kafka,但必须先执行
kafka-storage.sh format - ZooKeeper 启动命令:
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties(加-daemon是关键) - Kafka 启动命令:
bin/kafka-server-start.sh -daemon config/server.properties - 检查是否真在跑:
ps aux | grep -E "(ZooKeeper|Kafka)",而不是只看终端有没有输出started - 别依赖 systemd —— Kafka 官方不提供 service 文件,自己写容易漏
Restart=on-failure和LimitNOFILE=1000000
高吞吐场景下最容易被忽略的三件事
这些不写在文档里,但压测失败十次有八次栽在这儿:
- Linux 内核参数没调:
net.core.somaxconn至少 65535,vm.swappiness=1,transparent_hugepage=never(后者必须 echo 到/sys/kernel/mm/transparent_hugepage/enabled) -
log.dirs所在文件系统没用xfs格式(ext4 在高并发小文件写入下性能衰减明显) - 没关 SELinux 或 AppArmor —— 某些发行版(如 Oracle Linux 8.4)默认开启,会拦截 Kafka 对
/proc/sys/vm/swappiness的读写,导致 JVM GC 异常
真正卡住的不是安装步骤,而是磁盘 IO 和内核调度那层看不见的墙。配完先跑 kafka-producer-perf-test.sh 压 10MB/s 看 5 分钟,比反复改配置更早暴露问题。










