Ubuntu系统下Apache Kafka Kraft模式服务启动失败求助
解决Kraft模式Kafka作为系统服务启动失败的问题
问题核心原因
从报错日志Exec format error及脚本内容分析,失败根源包含三点:
/etc/init.d/kafka脚本缺失shebang头,systemd无法识别脚本执行环境stop分支存在语法错误,多余的;;导致后续PID逻辑代码无法执行- 启动流程中重复生成Cluster ID并格式化日志目录,会破坏已有数据且触发重复格式化报错
修复步骤
1. 添加脚本shebang头
在/etc/init.d/kafka文件最开头添加一行,指定bash解释器:
#!/bin/bash
2. 修复stop分支语法错误
删除stop分支中echo "Shutting down Kafka"后的多余;;:
# 错误代码 stop) echo "Shutting down Kafka";; pid=`ps ax | grep -i 'kafka.Kafka' | grep -v grep | awk '{print $1}'` ... # 修正后 stop) echo "Shutting down Kafka" pid=`ps ax | grep -i 'kafka.Kafka' | grep -v grep | awk '{print $1}'` ...
3. 调整启动流程,避免重复格式化
Kraft模式下日志目录仅需首次启动前手动格式化一次,重复格式化会损坏数据:
# 执行一次即可,无需写入启动脚本 KAFKA_CLUSTER_ID=$(/opt/kafka/bin/kafka-storage.sh random-uuid) /opt/kafka/bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c /opt/kafka/config/kraft/server.properties
随后修改脚本start分支,仅保留启动命令:
start) echo "Start Kafka server" ${KAFKA_HOME}/bin/kafka-server-start.sh -daemon ${KAFKA_HOME}/config/kraft/server.properties ;;
4. 修正后的完整脚本
#!/bin/bash KAFKA_HOME=/opt/kafka # See how we were called. case "$1" in start) # Start daemon. echo "Start Kafka server" ${KAFKA_HOME}/bin/kafka-server-start.sh -daemon ${KAFKA_HOME}/config/kraft/server.properties ;; stop) # Stop daemons. echo "Shutting down Kafka" pid=`ps ax | grep -i 'kafka.Kafka' | grep -v grep | awk '{print $1}'` if [ -n "$pid" ] then kill -9 $pid else echo "Kafka was not Running" fi ;; restart) $0 stop sleep 2 $0 start ;; status) pid=`ps ax | grep -i 'kafka.Kafka' | grep -v grep | awk '{print $1}'` if [ -n "$pid" ] then echo "Kafka is Running as PID: $pid" else echo "Kafka is not Running" fi ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 esac exit 0
5. 最终操作
给脚本添加执行权限:
sudo chmod +x /etc/init.d/kafka
更新systemd配置:
sudo systemctl daemon-reload
启动并查看服务状态:
sudo systemctl start kafka sudo systemctl status kafka
内容的提问来源于stack exchange,提问作者cogitoergosum
相关产品推荐
相关产品推荐

