You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu系统下Apache Kafka Kraft模式服务启动失败求助

解决Kraft模式Kafka作为系统服务启动失败的问题

问题核心原因

从报错日志Exec format error及脚本内容分析,失败根源包含三点:

  1. /etc/init.d/kafka脚本缺失shebang头,systemd无法识别脚本执行环境
  2. stop分支存在语法错误,多余的;;导致后续PID逻辑代码无法执行
  3. 启动流程中重复生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:00:36