在 Debian 上部署和配置 Apache Kafka,有几个容易踩坑的关键点,我按「系统层 → Kafka 本身 → 运维与排错」给你总结一下,都是实战经验。
Kafka 强依赖 JVM,Debian 最常见问题就是 Java 版本或路径不对。
✅ 推荐:
sudo apt install openjdk-17-jdk
java -version
⚠️ 注意:
gcj 或太老的 Java 8(部分新版本已不支持)设置 JAVA_HOME(很重要):
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
可写入:
/etc/profile.d/kafka.sh
Kafka 对 socket / 文件非常敏感。
ulimit -n
建议至少:
65535
永久修改(Debian):
sudo vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
并确保:
/etc/pam.d/common-session
包含:
session required pam_limits.so
Kafka 对延迟非常敏感。
sudo swapoff -a
永久禁用:
sudo vim /etc/fstab
# 注释 swap 行
✅ 推荐:
/ 根分区mount | grep kafka
⚠️ 不要放在 NFS 上!
broker.id=1
集群中 每个 broker 不能重复
本机监听:
listeners=PLAINTEXT://0.0.0.0:9092
客户端连接地址:
advertised.listeners=PLAINTEXT://your_server_ip:9092
⚠️ 常见错误:
listenerslocalhost 配 advertised.listeners(客户端会连不上)log.dirs=/data/kafka-logs
⚠️ 注意:
/tmpsudo chown -R kafka:kafka /data/kafka-logs
zookeeper.connect=localhost:2181
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@localhost:9093
⚠️ 不要混用 Zookeeper 和 KRaft
log.retention.hours=168
log.retention.bytes=-1
log.segment.bytes=1073741824
⚠️ 生产环境一定要控制磁盘使用,否则会爆盘。
[Unit]
Description=Apache Kafka
After=network.target
[Service]
Type=simple
User=kafka
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable kafka
sudo systemctl start kafka
通常需要:
9092(客户端)2181(Zookeeper)9093(KRaft controller)sudo ufw allow 9092
确保:
hostname -f
能解析到 IP,否则 Kafka 可能启动异常。
| 问题 | 原因 |
|---|---|
| 启动后客户端连不上 | advertised.listeners 配错 |
| Too many open files | ulimit 没改 |
| 磁盘突然满 | 日志保留没限制 |
| systemd 启动失败 | User / 路径 / 权限 |
| Java 找不到 | JAVA_HOME 没设 |
| 集群 broker 互相看不到 | broker.id 重复 |
/opt/kafka # Kafka 安装
/data/kafka-logs # 数据
/etc/kafka # 自定义配置
/var/log/kafka # 日志
如果你愿意,我可以:
直接告诉我你是 单机 / 集群 / 本地测试 / 生产环境 即可。