web-dev-qa-db-ja.com

Ubuntuでシステムを起動したときにKafkaを自動的に起動する方法は?

Kafkaは、システムの起動時にKafkaを開始する公式の方法(init.dスクリプトなど)がありますか?

Kafka私が見た唯一の公式な方法は:

Nohup ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties > ~/kafka/kafka.log 2>&1 &

@rebootcrontab -eタスクを使用しようとしましたが、Kafkaが起動しませんでした。カスタムinit.dを書いた人もいます

利用可能なカスタムinit.dスクリプトもあります(例: onetwothree )が、それらはすべて異なり、私は十分に精通していませんinit.dは、実装するものがある場合はそれを理解します。

システム起動時にKafkaを開始する方法は?

11
Greg

Ubuntu14.04で自動的に起動するようにKafkaを構成する方法は次のとおりです。

Sudo su
cp -R ~/kafka_2.11-0.10.0.1 /opt
ln -s /opt/kafka_2.11-0.10.0.1 /opt/kafka

次の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

次のコマンドを使用してkafkaサービスを作成します:

chmod 755 /etc/init.d/kafka
update-rc.d kafka defaults

これで、次のようにkafkaサービスを開始および停止できるはずです:

Sudo service kafka start
Sudo service kafka status
Sudo service kafka stop

後でKafkaサービスを削除する場合は、update-rc.d -f kafka removeを実行します。

19
Ian Downard

簡単なアプローチの1つは、systemdを使用することです。起動時にJava_HOMEのような環境変数はまだロードされていないので、システムに導入する必要があることに注意してください。良い解決策の1つは、profileという名前のファイルを作成し、それに必要なすべての変数を追加することです。

# /home/kafka/profile
Java_HOME=/opt/jdk8
KAFKA_HOME=/opt/kafka

Kafkaをパス/opt/kafkaにインストールしたとすると、Ubuntuの起動後にKafkaが自動的に実行されます(Ubuntu 16.04とcentOS7でテスト済みで、どのサーバーでも動作すると思います) systemd)をサポートする配布では、次のコマンドを実行します。

Sudo nano /etc/systemd/system/kafka.service  # open file to add service informations

次に、次の内容をファイルに追加します

[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

注: Kafkaは開始時に動物園の飼育係が接続する必要があるため、飼育係のサービスもあると思い、Kafkaサービスを実行するように設定しました動物園の飼育係のサービス開始後。

kafka.serviceファイルを保存した後、次のコマンドを実行してKafkaサービスのリンクを作成すると、OSを再起動するたびにリンクが開始されます。

Sudo systemctl enable kafka

これで、次のコマンドを使用してKafkaサービスを開始できます。

Sudo systemctl start kafka.service

サービスのステータスを確認します。

Sudo systemctl status kafka.service
6

Kafkaをダウンロード

cd /opt
wget http://mirror.dkm.cz/Apache/kafka/2.2.1/kafka_2.11-2.2.1.tgz
Sudo tar -zxvf kafka_2.11-2.2.1.tgz
Sudo rm kafka_2.11-2.2.1.tgz
Sudo mv kafka_2.11-2.2.1 kafka
cd kafka

Zookeeperのインストール

Sudo vi /etc/systemd/system/zookeeper.service

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

Zookeeperを起動

Sudo systemctl enable zookeeper.service

Sudo systemctl start zookeeper.service

Sudo systemctl status zookeeper.service

アクティブ(実行中)

Kafkaをインストール

Sudo vi /etc/systemd/system/kafka.service

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

カフカを開始

Sudo systemctl enable kafka.service

Sudo systemctl start kafka.service

Sudo systemctl status kafka.service

アクティブ(実行中)

テストKafka動作

トピックを作成

Sudo bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test-topic

メッセージをトピックに入れる

Sudo bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test-topic  
> test message1
> test messate2
^C

トピックからメッセージを読む

Sudo bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic test-topic
test message1
test messate2
^C
4
Jakub Krhovják