脚本说明
kafka依赖zookeeper,启动时候需要先启动zookeeper,并且确保zookeeper正常启动。该脚本进行以下操作:
- 启动zookeeper
- 检查zookeeper是否正常启动,如果没有启动成功,等待zookeeper启动
- 启动kafka, 等待kafka启动成功
备注:kafka关闭后,注册的节点不会立马清除,需要等待一段时间再启动,不然会报节点存在的异常导致启动失败
脚本内容
#!/bin/bash
zk_port=2181
kafka_port=9092
kafka_dir=kafka_2.12-3.2.1
function stop_app() {
echo '【关闭已有进程】'
zk_num=`ps -ef|grep ${kafka_dir}|grep config/server.properties|wc -l`
if [ ${zk_num} -gt 0 ];then
ps -ef|grep ${kafka_dir}|grep config/zookeeper.properties|awk '{print $2}'|xargs kill -15
echo '【zookeeper】终止'
fi
kafka_num=`ps -ef|grep ${kafka_dir}|grep config/server.properties|wc -l`
if [ ${kafka_num} -gt 0 ];then
ps -ef|grep ${kafka_dir}|grep config/server.properties|awk '{print $2}'|xargs kill -15
echo '【kafka】终止'
fi
}
function check_zk() {
num=`lsof -i:${zk_port}|wc -l`
return ${num};
}
function check_kafka() {
num=`lsof -i:${kafka_port}|wc -l`
return ${num};
}
start_app() {
nohup ./bin/zookeeper-server-start.sh config/zookeeper.properties > ./logs/zk_start.log 2>&1 &
check_zk
while [ $? -eq 0 ]
do
echo '【zookepper】启动中...'
sleep 1
check_zk
done
sleep 3
echo '【zookepper】启动成功,准备启动kafka.'
nohup ./bin/kafka-server-start.sh config/server.properties > ./logs/kafka_start.log 2>&1 &
check_kafka
while [ $? -eq 0 ]
do
echo '【kafka】启动中...'
sleep 1
check_kafka
done
echo '【kafka】启动完毕,端口使用情况如下:'
lsof -i:${kafka_port}
}
uage() {
echo '使用示例: sh start_service.sh [start|restart|stop]'
}
exe_type=$1
case "$exe_type" in
start)
start_app
;;
restart)
stop_app
echo '【kafka】关闭后节点等待清除中...'
sleep 10
start_app
;;
stop)
stop_app
;;
*)
uage
exit 1
esac
使用示例
使用示例: sh start_service.sh [start|restart|stop]