Debian上Kafka启动失败的定位与修复
一、快速定位步骤
sudo journalctl -u kafka -n 200 --no-pagertail -n 200 /opt/kafka/logs/server.log(路径以实际安装为准)sudo netstat -tlnp | grep 9092 或 sudo lsof -i :9092二、常见根因与对应修复
ZooKeeper 未就绪或连接配置错误
zookeeper.connect;必要时在 /etc/systemd/system/kafka.service 的 [Unit] 增加 After=zookeeper.service 确保启动顺序;用 zkCli.sh 验证连接与根节点。残留 Broker 注册信息导致冲突
zkCli.sh 中清理残留节点(示例:ls /kafka/brokers/ids 查看,delete /kafka/brokers/ids/<id> 删除),再启动 Kafka。端口 9092 被占用
server.properties 中的 port;验证:sudo lsof -i :9092 或 netstat -tlnp | grep 9092。Java 或内存问题
KAFKA_HEAP_OPTS="-Xms2G -Xmx2G"),并检查系统可用内存。systemd 单元配置不当
systemctl status 显示启动后立即失败,但脚本返回 0;或依赖未就绪。Type=forking,正确设置 ExecStart/ExecStop,补充 SuccessExitStatus=0 143,增加 Restart=on-failure 与 LimitNOFILE=65536,并在 [Unit] 中声明 After=network.target zookeeper.service。三、最小可用的 systemd 单元示例
/etc/systemd/system/kafka.service[Unit]
Description=Apache Kafka Server
After=network.target zookeeper.service
[Service]
Type=forking
User=kafka
Group=kafka
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk"
ExecStart=/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
SuccessExitStatus=0 143
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reloadsudo systemctl start kafkasudo systemctl status kafkasudo systemctl enable kafkasudo reboot四、验证与收尾
sudo systemctl status kafka(应为 active (running))sudo lsof -i :9092 或 netstat -tlnp | grep 9092(应看到 LISTEN)tail -n 100 /opt/kafka/logs/server.log(无 Fatal,出现 Kafka Server started 等字样)nc -vz 127.0.0.1 9092(应提示 succeeded)journalctl -u kafka -n 200 --no-pager/opt/kafka/logs/server.log 末尾的错误栈free -h、df -h、ulimit -n 等资源信息