我正在使用这个答案中的说明将 Kafka 设置为 AWS EC2 上 Ubuntu-22.04 上的服务。我正在按照此处的说明安装 Kafka。这是我的 /etc/init.d/kafka
文件。请注意,我能够从命令行成功启动 Kafka;但是,作为一项服务,启动失败了。
KAFKA_HOME=/opt/kafka
# See how we were called.
case "$1" in
start)
# Start daemon.
echo "Generate cluster UUID"
KAFKA_CLUSTER_ID="$(${KAFKA_HOME}/bin/kafka-storage.sh random-uuid)"
echo "Format log directories"
${KAFKA_HOME}/bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c ${KAFKA_HOME}/config/kraft/server.properties
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
运行时
sudo systemctl kafka start
我收到以下错误。
Job for kafka.service failed because the control process exited with error code.
See "systemctl status kafka.service" and "journalctl -xeu kafka.service" for details.
并且,
sudo systemctl kafka status
显示了这一点。
× kafka.service
Loaded: loaded (/etc/init.d/kafka; generated)
Active: failed (Result: exit-code) since Fri 2023-10-27 15:42:14 UTC; 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 8492 ExecStart=/etc/init.d/kafka start (code=exited, status=203/EXEC)
CPU: 946us
Oct 27 15:42:14 ip-172-31-15-126 systemd[8492]: kafka.service: Failed to execute /etc/init.d/kafka: Exec format error
Oct 27 15:42:14 ip-172-31-15-126 systemd[8492]: kafka.service: Failed at step EXEC spawning /etc/init.d/kafka: Exec format error
Oct 27 15:42:14 ip-172-31-15-126 systemd[1]: Starting kafka.service...
Oct 27 15:42:14 ip-172-31-15-126 systemd[1]: kafka.service: Control process exited, code=exited, status=203/EXEC
Oct 27 15:42:14 ip-172-31-15-126 systemd[1]: kafka.service: Failed with result 'exit-code'.
Oct 27 15:42:14 ip-172-31-15-126 systemd[1]: Failed to start kafka.service.
这是我的 Java 版本 - 如果有帮助的话。
java -version
openjdk version "19.0.2" 2023-01-17
OpenJDK Runtime Environment (build 19.0.2+7-Ubuntu-0ubuntu322.04)
OpenJDK 64-Bit Server VM (build 19.0.2+7-Ubuntu-0ubuntu322.04, mixed mode, sharing)
请让我知道如何将 Kafka 作为服务启动。
放在启动 shell 脚本的顶部可能会修复此错误。如果它不能修复错误,您可以检查journalctl,如此处所述,这也可能与 systemd 配置有关,在这种情况下,我建议创建一个类似 this 的服务文件
为什么我们使用shebang,在show中告诉linux系统使用bash来运行文件中“下面”的代码很重要。 下面的工作代码
#!/bin/bash
KAFKA_HOME=/opt/kafka
# See how we were called.
case "$1" in
start)
# Start daemon.
echo "Generate cluster UUID"
KAFKA_CLUSTER_ID="$(${KAFKA_HOME}/bin/kafka-storage.sh random-uuid)"
echo "Format log directories"
${KAFKA_HOME}/bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c ${KAFKA_HOME}/config/kraft/server.properties
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