任务描述: 前端通过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