在 Debian 上调试 Kafka 服务,通常可以从 服务状态、日志、配置、端口、JVM、系统资源 等方面入手。下面给你一套比较系统的排查思路(适用于 systemd 管理的 Kafka 和 官方/第三方包)。
systemctl status kafka
常见状态:
active (running) ✅failed ❌activating ⚠(可能端口被占用或 ZooKeeper 没启动)重启服务:
systemctl restart kafka
查看是否开机自启:
systemctl is-enabled kafka
常见路径:
/var/log/kafka/
或
/opt/kafka/logs/
重点查看:
server.log
controller.log
实时查看:
tail -f /var/log/kafka/server.log
常见错误关键词:
ERRORFATALAddress already in useConnection refusedOutOfMemoryErrorjournalctl -u kafka -f
如果 Kafka 启动就失败,这里通常能看到 JVM 或启动参数问题。
Kafka 依赖 ZooKeeper(除非你用的是 KRaft 模式)。
systemctl status zookeeper
ss -lntp | grep 2181
或:
telnet localhost 2181
ZooKeeper 日志:
/var/log/zookeeper/
常见路径:
/etc/kafka/server.properties
或
/opt/kafka/config/server.properties
重点检查:
broker.id=0
listeners=PLAINTEXT://:9092
log.dirs=/var/lib/kafka-logs
zookeeper.connect=localhost:2181
常见错误:
log.dirs 目录不存在或权限不足listeners 写错zookeeper.connect 指向错误地址ls -ld /var/lib/kafka-logs
修复权限示例:
chown -R kafka:kafka /var/lib/kafka-logs
ss -lntp | grep 9092
如果没有监听:
ps -ef | grep kafka
或:
jps
应看到:
Kafka
/opt/kafka/bin/kafka-topics.sh \
--bootstrap-server localhost:9092 \
--create \
--topic test
kafka-topics.sh --bootstrap-server localhost:9092 --list
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
dmesg | grep -i oom
编辑:
/etc/kafka/kafka-env.sh
或 systemd service 文件:
Environment="KAFKA_HEAP_OPTS=-Xmx1G -Xms512M"
如果你是 Kafka 3.x+ 且使用 KRaft:
检查:
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@localhost:9093
KRaft 不需要 ZooKeeper,许多“连不上 ZooKeeper”的问题其实是配置错了模式。
| 现象 | 可能原因 |
|---|---|
| 启动失败 | ZooKeeper 未启动 |
| 端口未监听 | 配置错误 / 权限问题 |
| OOM | JVM 内存不足 |
| topic 创建失败 | broker 未就绪 |
| 连接拒绝 | listeners 配置错误 |
systemctl status kafkajournalctl -u kafka -fserver.logserver.properties如果你愿意,可以把 具体报错日志 或 systemctl status 输出贴出来,我可以直接帮你定位问题。