温馨提示×

Ubuntu Kafka配置有哪些坑

小樊
58
2026-07-07 12:12:23
栏目: 智能运维

Ubuntu 上部署 / 配置 Kafka 时,确实有不少“坑”,很多都不是 Kafka 本身复杂,而是 环境、系统和细节配置 导致的。下面按 常见踩坑点 + 解决方案 给你系统梳理一遍。


一、Java 环境相关坑(最常见)

1️⃣ Java 版本不兼容

现象

  • Kafka 启动失败
  • 报错:Unsupported major.minor version
  • NoSuchMethodError

原因

  • Kafka 3.x 建议 Java 11 或 Java 17
  • Kafka 2.x 建议 Java 8 / 11

解决

java -version

推荐安装:

sudo apt install openjdk-11-jdk

并设置:

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

一定要确认 Kafka 使用的 Java 版本


二、主机名 / hosts 配置坑(非常经典)

2️⃣ advertised.listeners 配置错误

现象

  • Kafka 能启动
  • 外部或本地客户端连不上
  • Connection refused / LEADER_NOT_AVAILABLE

原因

  • advertised.listeners 配置的是 hostname,但客户端解析不了

错误示例

advertised.listeners=PLAINTEXT://ubuntu:9092

/etc/hosts 里没有 ubuntu

正确做法

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

并确认:

hostname -i

三、Zookeeper / KRaft 混淆坑

3️⃣ Kafka 版本与协调器不匹配

现象

  • 启动 Kafka 报 Zookeeper 相关错误
  • 或 Kafka 启动后 quickly exit

背景

  • Kafka ≥ 3.3:支持 KRaft(无 Zookeeper)
  • Kafka ≤ 2.x:必须 Zookeeper

确认你用的是哪种模式

Zookeeper 模式

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

KRaft 模式

bin/kafka-storage.sh random-uuid
bin/kafka-storage.sh format -t <uuid>
bin/kafka-server-start.sh config/kraft/server.properties

⚠️ 不要混用


四、目录权限 & 磁盘坑

4️⃣ log.dirs 权限不足

现象

  • Kafka 启动失败
  • Permission denied

原因

  • Kafka 默认使用 kafka 用户
  • 或你手动指定了 /data/kafka-logs

解决

sudo mkdir -p /data/kafka-logs
sudo chown -R $USER:$USER /data/kafka-logs

server.properties

log.dirs=/data/kafka-logs

五、Ubuntu 系统参数坑(生产必踩)

5️⃣ 文件描述符不足

现象

  • Kafka 正常运行一段时间后崩溃
  • too many open files

解决

ulimit -n

修改:

sudo vi /etc/security/limits.conf

添加:

* soft nofile 65536
* hard nofile 65536

6️⃣ vm.swappiness 不合理

现象

  • Kafka 延迟突然变高
  • GC 频繁

建议

cat /proc/sys/vm/swappiness

设置为:

sudo sysctl vm.swappiness=1

六、端口 & 防火墙坑

7️⃣ 9092 端口未放行

现象

  • 本地能连
  • 外部机器连不上

检查

ss -lntp | grep 9092

防火墙:

sudo ufw allow 9092

云服务器还要检查 安全组


七、配置参数常见坑

8️⃣ num.partitions 理解错误

  • 只是 默认分区数
  • 已创建的 topic 不会生效

✅ 创建 topic 时显式指定:

bin/kafka-topics.sh --create \
--topic test \
--partitions 3 \
--replication-factor 1

9️⃣ auto.create.topics.enable

生产环境建议关闭

auto.create.topics.enable=false

否则:

  • 拼写错误 topic 会被自动创建
  • 难以排查问题

八、日志 & 磁盘满坑

10️⃣ 日志无限增长

现象

  • 磁盘 100%
  • Kafka 停止工作

必须配置

log.retention.hours=168
log.segment.bytes=1073741824
log.cleanup.policy=delete

九、systemd 服务坑(进阶)

11️⃣ systemd 下 Kafka 启动失败

原因

  • Java 环境变量没加载
  • 启动顺序错误

✅ 示例 service:

[Service]
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties

十、快速自检清单 ✅

java -version
hostname -i
ulimit -n
ss -lntp | grep 9092
ls -ld /data/kafka-logs

总结一句话

Ubuntu 上 Kafka 的坑,80% 在 Java、hostname、advertised.listeners、权限和磁盘。

如果你愿意,我可以:

  • ✅ 给你一份 Ubuntu 22.04 + Kafka 3.x 标准生产配置
  • ✅ 帮你排查某条具体报错
  • ✅ 对比 Zookeeper vs KRaft 怎么选

直接把你的 Kafka 版本 + 报错日志 发我即可。

0