通過shell腳本控制kafka

任務描述: 前端通過shell腳本一鍵啓動所有服務,包括zookeeper服務、kafka服務、以及創建好topic。也就是把啓動多個服務的功能放到一個shell腳本中,並且可以通過一個shell腳本文件控制服務關閉。

  1. 需要先把kafka的安裝目錄添加到環境變量.bashrc。例如我的
$ sudo gedit ~/.bashrc
export KAFKA_HOME=/home/ubuntu/Downloads/kafka_2.13-2.4.0/bin
$ source ~/.bashrc
  1. 然後編寫launch.sh
#! /bin/bash

# launch zookeeper
function zookeeper_launch() {
    if [ $# -lt 1 ]; then
        echo "USAGE: $0 [-daemon] zookeeper.properties"
        exit 1
    fi
    if [ "x$KAFKA_LOG4J_OPTS" = "x" ]; then
        export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:$KAFKA_HOME/../config/log4j.properties"
    fi

    if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
        export KAFKA_HEAP_OPTS="-Xmx512M -Xms512M"
    fi

    EXTRA_ARGS=${EXTRA_ARGS-'-name zookeeper -loggc'}

    COMMAND=$1
    case $COMMAND in
    -daemon)
        EXTRA_ARGS="-daemon "$EXTRA_ARGS
        shift
        ;;
    *) ;;

    esac
    exec $KAFKA_HOME/kafka-run-class.sh $EXTRA_ARGS org.apache.zookeeper.server.quorum.QuorumPeerMain "$@" &

}

# launch kafka server
function kafka_launch() {
    if [ $# -lt 1 ]; then
        echo "USAGE: $0 [-daemon] zookeeper.properties"
        exit 1
    fi
    if [ "x$KAFKA_LOG4J_OPTS" = "x" ]; then
        export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:$KAFKA_HOME/../config/log4j.properties"
    fi

    if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
        export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
    fi

    EXTRA_ARGS=${EXTRA_ARGS-'-name kafkaServer -loggc'}

    COMMAND=$1
    case $COMMAND in
    -daemon)
        EXTRA_ARGS="-daemon "$EXTRA_ARGS
        shift
        ;;
    *) ;;

    esac
    exec $KAFKA_HOME/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@" &

}

# create yourself topic and set ip
TOPIC="ddva2"
IP="192.168.1.109:9092"
# stop all servers
./test4.sh

CONFIG_ZOOKEEPER="/../config/zookeeper.properties"
CONFIG_ZOOKEEPER=$KAFKA_HOME$CONFIG_ZOOKEEPER
CONFIG_KAFKA="/../config/server.properties"
CONFIG_KAFKA=$KAFKA_HOME$CONFIG_KAFKA

zookeeper_launch $CONFIG_ZOOKEEPER
kafka_launch $CONFIG_KAFKA

# check exits topic list
EXTRA_ARGS_LIST=${EXTRA_ARGS_LIST-'--list --bootstrap-server'}
EXTRA_ARGS_TOPIC=${EXTRA_ARGS_TOPIC-'--create --bootstrap-server '$IP' --replication-factor 1 --partitions 1 --topic '$TOPIC}
exec $KAFKA_HOME/kafka-run-class.sh kafka.admin.TopicCommand $EXTRA_ARGS_TOPIC
exec $KAFKA_HOME/kafka-run-class.sh kafka.admin.TopicCommand $EXTRA_ARGS_LIST
  1. 關閉服務的腳本stop.sh,注意需要先關閉kafka後關閉zookeeper,順序要正確。如果啓動時kafka未啓動成功,再運行一遍launch.sh即可。
#! /bin/bash

SIGNAL=${SIGNAL:-TERM}
PIDS=$(ps ax | grep -i 'kafka\.Kafka' | grep java | grep -v grep | awk '{print $1}')

if [ -z "$PIDS" ]; then
  echo "No kafka server to stop"
else
  kill -s $SIGNAL $PIDS
  echo "Success to kill kafka."
fi

SIGNAL=${SIGNAL:-TERM}
PIDS=$(ps ax | grep java | grep -i QuorumPeerMain | grep -v grep | awk '{print $1}')

if [ -z "$PIDS" ]; then
  echo "No zookeeper server to stop"
else
  kill -s $SIGNAL $PIDS
  echo "Success to kill zookeeper."
fi

exit 1
  1. 如果有需要,設置shell的權限
$ chmod +x ./launch.sh
$ chmod +x ./stop.sh
  1. 運行
$ ./launch.sh
$ ./stop.sh
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章