通过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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章