如何在Ubuntu系统启动时自动启动Kafka?

Gre*_*reg 10 ubuntu init.d apache-kafka

Kafka是否有正式的方式(例如init.d脚本)在系统启动时启动Kafka?

启动卡夫卡的唯一官方方法我见过:

nohup ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties > ~/kafka/kafka.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)

我试图使用@reboot任务,crontab -e但它没有启动Kafka.有些人还编写了自定义init.d

还有一些自定义的init.d脚本可用(例如一个,两个,三个),但它们都是不同的,我对init.d不够熟悉,无法理解哪一个,如果有的话.

如何在系统启动时启动Kafka?

小智 18

以下是我如何配置Kafka在Ubuntu 14.04上自动启动:

sudo su
cp -R ~/kafka_2.11-0.10.0.1 /opt
ln -s /opt/kafka_2.11-0.10.0.1 /opt/kafka
Run Code Online (Sandbox Code Playgroud)

将以下init脚本复制到/etc/init.d/kafka:

DAEMON_PATH=/opt/kafka/
PATH=$PATH:$DAEMON_PATH/bin

# See how we were called.
case "$1" in
  start)
        # Start daemon.
        echo "Starting Zookeeper";
        nohup $DAEMON_PATH/bin/zookeeper-server-start.sh -daemon /$DAEMON_PATH/config/zookeeper.properties 2> /dev/null && \
        echo "Starting Kafka";
        nohup $DAEMON_PATH/bin/kafka-server-start.sh -daemon /$DAEMON_PATH/config/server.properties 2> /dev/null
        ;;
  stop)
        # Stop daemons.
        echo "Shutting down Zookeeper";
        pid=`ps ax | grep -i 'org.apache.zookeeper.server' | grep -v grep | awk '{print $1}'`
        if [ -n "$pid" ]
          then
          kill -9 $pid
        else
          echo "Zookeeper was not Running"
        fi
        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 'org.apache.zookeeper.server' | grep -v grep | awk '{print $1}'`
        if [ -n "$pid" ]
          then
          echo "Zookeeper is Running as PID: $pid"
        else
          echo "Zookeeper is not Running"
        fi
        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
Run Code Online (Sandbox Code Playgroud)

使用以下命令创建kafka服务:

chmod 755 /etc/init.d/kafka
update-rc.d kafka defaults
Run Code Online (Sandbox Code Playgroud)

现在您应该可以像这样启动和停止kafka服务:

sudo service kafka start
sudo service kafka status
sudo service kafka stop
Run Code Online (Sandbox Code Playgroud)

如果您想稍后删除Kafka服务,请运行update-rc.d -f kafka remove.


Jak*_*ják 9

下载卡夫卡

cd /opt
sudo wget http://mirror.hosting90.cz/apache/kafka/2.5.0/kafka-2.5.0-src.tgz
sudo tar -zxvf kafka-2.5.0-src.tgz
sudo mv kafka-2.5.0-src kafka
sudo rm kafka-2.5.0-src.tgz
cd kafka
sudo ./gradlew jar -PscalaVersion=2.11.12
Run Code Online (Sandbox Code Playgroud)

安装动物园管理员

sudo vi /etc/systemd/system/zookeeper.service
Run Code Online (Sandbox Code Playgroud)

编辑zookeeper.service

[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
User=root
ExecStart=/opt/kafka/bin/zookeeper-server-start.sh opt/kafka/config/zookeeper.properties
ExecStop=/opt/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

启动动物园管理员

sudo systemctl enable zookeeper.service

sudo systemctl start zookeeper.service

sudo systemctl status zookeeper.service
Run Code Online (Sandbox Code Playgroud)

活动(运行)

安装卡夫卡

sudo vi /etc/systemd/system/kafka.service
Run Code Online (Sandbox Code Playgroud)

编辑 kafka.service

[Unit]
Requires=zookeeper.service
After=zookeeper.service

[Service]
Type=simple
User=root
ExecStart=/bin/sh -c '/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties > /opt/kafka/kafka.log 2>&1'
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

启动卡夫卡

sudo systemctl enable kafka.service

sudo systemctl start kafka.service

sudo systemctl status kafka.service
Run Code Online (Sandbox Code Playgroud)

活动(运行)

测试 Kafka 工作

创建主题

sudo bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test-topic
Run Code Online (Sandbox Code Playgroud)

将消息放入主题

sudo bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test-topic  
> test message1
> test messate2
^C
Run Code Online (Sandbox Code Playgroud)

从主题读取消息

sudo bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic test-topic
test message1
test messate2
^C
Run Code Online (Sandbox Code Playgroud)


Soh*_*ani 5

一种简单的方法是使用systemd。您应注意,启动时尚未加载JAVA_HOME之类的环境变量,因此我们应将其引入系统。一个好的解决方案是创建一个名为的文件,profile并向其中添加所有必需的变量:

# /home/kafka/profile
JAVA_HOME=/opt/jdk8
KAFKA_HOME=/opt/kafka
Run Code Online (Sandbox Code Playgroud)

假设您已经在path上安装了Kafka /opt/kafka,为了让Kafka在Ubuntu启动后自动运行(在Ubuntu 16.04和centOS7上进行了测试,我猜它在systemd的支持下可以在任何发行版上运行)执行以下命令:

sudo nano /etc/systemd/system/kafka.service  # open file to add service informations
Run Code Online (Sandbox Code Playgroud)

现在将以下内容添加到文件中

[Unit]
Description=Kafka Daemon
Wants=syslog.target

# suppose you have a service named zookeeper that it start zookeeper and we want Kafka service run after the zookeeper service
After=zookeeper.service

[Service]    
Type=forking

# the user whom you want run the Kafka start and stop command under
User=kafka    

# the file path that contains envirnment variables
EnvironmentFile=/home/kafka/profile

# the directory that the commands will run there   
WorkingDirectory=/home/kafka/ 

# Kafka server start command
ExecStart=/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties

# Kafka server stop command
ExecStop=/opt/kafka/bin/kafka-server-stop.sh -daemon

TimeoutSec=30
Restart=on-failure

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

注意:由于Kafka在启动时需要Zookeeper进行连接,因此我以为我们也有Zookeeper服务,因此我将Kafka服务设置为在Zookeeper服务启动后运行。

现在,保存kafka.service文件后,只需运行以下命令即可创建Kafka服务的链接,该链接将在每次​​重启操作系统时启动:

sudo systemctl enable kafka
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用以下命令启动Kafka服务:

sudo systemctl start kafka.service
Run Code Online (Sandbox Code Playgroud)

并检查服务状态:

sudo systemctl status kafka.service
Run Code Online (Sandbox Code Playgroud)