温馨提示×

ubuntu kafka配置有何坑

小樊
48
2026-09-05 17:01:22
栏目: 智能运维

在 Ubuntu 上部署和使用 Kafka(尤其是新手或生产环境),有不少“坑”和易错点。下面按安装、配置、运行、生产环境几个维度给你总结常见坑及规避方法。


一、Java 环境相关坑

1. JDK 版本不匹配

坑:

  • Kafka 2.x 需要 Java 8
  • Kafka 3.x 推荐 Java 11 / 17
  • Ubuntu 默认 openjdk 可能不是你需要的版本

解决:

java -version

确保版本匹配,推荐:

sudo apt install openjdk-11-jdk

并在 ~/.bashrc/etc/profile 中指定:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

二、Zookeeper / KRaft 模式坑

2. Kafka 3.x 默认不再强依赖 Zookeeper(KRaft)

坑:

  • 老教程全是 Zookeeper
  • 新版本用 KRaft 但配置完全不同

建议:

  • 学习/测试:可用 Zookeeper(稳定)
  • 新项目:直接学 KRaft

Zookeeper 配置示例坑:

dataDir=/tmp/zookeeper   # ❌ 重启数据丢失

✅ 改成:

dataDir=/var/lib/zookeeper

三、server.properties 关键坑

3. listenersadvertised.listeners 配置错误(最常见)

坑:

  • 本地能连,远程连不上
  • Docker / 云服务器尤为明显

错误示例:

listeners=PLAINTEXT://localhost:9092
advertised.listeners=PLAINTEXT://localhost:9092

远程客户端会拿到 localhost,直接失败。

正确示例(服务器 IP):

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

4. broker.id 重复

坑:

  • 多 broker 时复制配置没改 id
  • 启动直接失败
broker.id=0  # 每个节点必须唯一

5. log.dirs 权限问题

坑:

  • 用 root 启动一次后,普通用户无法写
log.dirs=/var/lib/kafka-logs

确保权限:

sudo chown -R kafka:kafka /var/lib/kafka-logs

四、Ubuntu 系统层面坑

6. 用 root 启动 Kafka(严重坑)

坑:

  • 很多教程直接 sudo bin/kafka-server-start.sh
  • 导致文件权限混乱、不安全

正确做法:

sudo useradd kafka
sudo su - kafka

7. 文件描述符限制

坑:

  • 高并发时报:
Too many open files

解决:

ulimit -n 65536

或修改:

/etc/security/limits.conf
kafka  -  nofile  65536

8. 磁盘满导致 Kafka 卡死

坑:

  • 默认不限制日志大小
  • 磁盘 100% 后 broker 不可用

建议配置:

log.retention.hours=168
log.segment.bytes=1073741824
log.retention.bytes=107374182400

五、网络与防火墙坑

9. Ubuntu 防火墙没开 9092

sudo ufw allow 9092

云服务器还要开安全组


六、常见运行错误

10. Connection to node -1 could not be established

原因:

  • advertised.listeners
  • 客户端连的是错误地址

11. Topic 自动创建被禁

auto.create.topics.enable=false

生产环境建议关闭,但新手会懵。


七、生产环境额外坑

项目 建议
单节点 只适合测试
副本数 ≥ 3
min.insync.replicas 2
acks all
unclean.leader.election false

八、快速避坑检查清单 ✅

  • [ ] Java 版本正确
  • [ ] 不用 root 启动
  • [ ] advertised.listeners 正确
  • [ ] log.dirs 权限正确
  • [ ] 防火墙/安全组开放
  • [ ] 磁盘有监控
  • [ ] 不盲目复制教程配置

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

  • Ubuntu 版本
  • Kafka 版本
  • 是否 Docker / 云服务器
  • 单节点还是集群

我可以直接给你一份可用配置

0