任務描述: 前端通過shell腳本一鍵啓動所有服務,包括zookeeper服務、kafka服務、以及創建好topic。也就是把啓動多個服務的功能放到一個shell腳本中,並且可以通過一個shell腳本文件控制服務關閉。
- 需要先把kafka的安裝目錄添加到環境變量
.bashrc
。例如我的
$ sudo gedit ~/.bashrc
export KAFKA_HOME=/home/ubuntu/Downloads/kafka_2.13-2.4.0/bin
$ source ~/.bashrc
- 然後編寫
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
- 關閉服務的腳本
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
- 如果有需要,設置shell的權限
$ chmod +x ./launch.sh
$ chmod +x ./stop.sh
- 運行
$ ./launch.sh
$ ./stop.sh