温馨提示×

ubuntu kafka配置有啥坑

小樊
41
2026-09-11 12:22:56
栏目: 智能运维

在 Ubuntu 上部署/配置 Kafka(通常配合 Zookeeper 或 KRaft),有几个常见坑容易忽略的点,按“踩坑频率”给你总结一下:


一、Java 环境坑(最常见)

1. Java 版本不匹配

Kafka 对 JDK 有要求:

  • Kafka 2.x / 3.0–3.3:JDK 8 / 11
  • Kafka 3.4+:推荐 JDK 17(JDK 8 已不支持)

坑点

  • Ubuntu 默认 apt install default-jdk 可能是 JDK 11/17
  • 手动装的 JDK 没配置 JAVA_HOME

建议

java -version
echo $JAVA_HOME

Kafka 启动脚本会读 JAVA_HOME,没配容易报错:

Could not find or load main class kafka.Kafka

二、监听地址(listeners / advertised.listeners)

2. 只配 localhost,外部连不上

典型错误配置

listeners=PLAINTEXT://localhost:9092

结果:

  • 本机能连
  • 其他机器/容器连不上

正确姿势

listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://<服务器IP>:9092

advertised.listeners 是“告诉客户端该连哪”


三、Zookeeper vs KRaft 模式混淆

3. Kafka 3.x 后默认支持 KRaft

很多人还在按老教程配 Zookeeper,结果:

  • zookeeper.properties 配了
  • 却用 kafka-server-start.sh 启动 KRaft 模式

两种模式不能混用

✅ Zookeeper 模式:

bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties

✅ KRaft 模式(Kafka 3.3+):

bin/kafka-storage.sh format ...
bin/kafka-server-start.sh config/kraft/server.properties

四、目录和权限问题

4. log.dirs 权限不足

默认:

log.dirs=/tmp/kafka-logs

坑:

  • /tmp 重启可能被清
  • 用非 root 用户跑 Kafka 但目录是 root 的

建议

sudo mkdir -p /data/kafka
sudo chown -R kafka:kafka /data/kafka
log.dirs=/data/kafka

五、Ubuntu 系统参数坑

5. 文件描述符不够

Kafka 很吃 fd,默认 1024 会炸

现象

Too many open files

解决

ulimit -n 65536

/etc/security/limits.conf

kafka soft nofile 65536
kafka hard nofile 65536

六、防火墙 & 云服务器

6. 9092 没开端口

Ubuntu:

sudo ufw allow 9092

云服务器还要开安全组


七、内存配置坑

7. Kafka 默认 JVM 内存太大

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

小机器直接 OOM


八、常见“看起来没问题但其实坑”的配置

配置项
auto.create.topics.enable 默认 true,生产环境建议 false
num.partitions 建完 topic 后改不了
offsets.topic.replication.factor 单节点必须设为 1
delete.topic.enable 老版本默认 false

九、快速自检清单 ✅

  • [ ] Java 版本正确
  • [ ] advertised.listeners 是 IP
  • [ ] 不是 root 跑 Kafka
  • [ ] log.dirs 有写权限
  • [ ] 防火墙/安全组放通
  • [ ] 明确 Zookeeper 还是 KRaft

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

  • Ubuntu 版本
  • Kafka 版本
  • 单机 / 集群
  • 是否 Docker

我可以直接帮你写一份能跑的配置文件

0