shell脚本学习

shell脚本实现kafka相关操作

配置环境变量:
#配置zookeeper和kafka安装目录
export ZOOKEEPER_HOME=/opt/apache-zookeeper-3.6.2-bin
export KAFKA_HOME=/opt/kafka_2.12-2.7.0
source /etc/profile

脚本名称k_start.sh
./k_start.sh start:启动kafka
./k_start.sh stop:关闭kafka
./k_start.sh create test p1 r1:创建topic
./k_start.sh list:查询topic列表
./k_start.sh send test :向指定topic发送消息

zookeeper="${ZOOKEEPER_HOME}/bin/zkServer.sh"
kafka="${KAFKA_HOME}/bin/"
kafka_conf="$KAFKA_HOME/config/server.properties"
#printf "%s\n" "zookeeper file dir: ${zookeeper}"
#printf "%s\n" "kafka file dir: ${kafka}"
case $1 in
	start)#启动
		#启动zookeeper
		#判断zookeeper是否启动
		if [[ $(pgrep -f "zookeeper*"|wc -l) -gt 0 ]];then
			#zookeeper已启动,直接启动kafka
			printf "%s\n" "zookeeper已启动!"
			#判断kafka是否已启动
			if [[ $(pgrep -f "kafka*"|wc -l) -gt 0 ]];then
				#kafka已启动
				printf "%s\n" "kafka已启动!"
			else
				#启动kafka
				cd ${kafka}
				nohup ./kafka-server-start.sh ${kafka_conf} &
				sleep 8
				printf "%s\n" $(pgrep -f "kafka*"|wc -l)
				if [[ $(pgrep -f "kafka*"|wc -l) -gt 0 ]];then
					printf "%s\n" "kafka启动成功!"
				else
					printf "%s\n" "kafka启动失败!"
				fi
			fi
		else
			#启动zookeeper
			results=`. ${zookeeper} start 2>&1`
			#printf "%s\n" "${results}"
			if [[ $(echo ${results} | grep "STARTED") != "" ]];then
			        #zookeeper启动成功,启动kafka
				printf "%s\n" "zookeeper启动成功!"
				#启动kafka...
				cd ${kafka}
				nohup ./kafka-server-start.sh ${kafka_conf} &
				sleep 8
				if [[ $(pgrep -f "kafka*"|wc -l) -gt 0 ]];then
					printf "%s\n" "kafka启动成功!"
				else
					printf "%s\n" "kafka启动失败!"
				fi
			else 
				printf "%s\n" "zookeeper启动失败!"
				printf "%s\n" "${results}"
			fi
		fi
		;;
	stop)#终止
		#判断kafka是否启动
		if [[ $(pgrep -f "kafka*"|wc -l) -gt 0 ]];then
			#kafka已启动,关闭kafka
			cd ${kafka}
			nohup ./kafka-server-stop.sh ${kafka_conf} &
			sleep 5
			#判断kafka是否关闭
			if [[ $(pgrep -f "kafka*"|wc -l) -eq 0 ]];then
				#kafka关闭成功	
				printf "%s\n" "kafka关闭成功!"
				#判断zookeeper是否启动
				if [[ $(pgrep -f "zookeeper*"|wc -l) -gt 0 ]];then
					#zookeeper已启动,关闭zookeeper
					close_results=`. ${zookeeper} stop 2>&1`
					#判断zookeeper是否关闭成功
					if [[ $(echo ${close_results}|grep "STOPPED") != "" ]];then
						#zookeeper关闭成功
						printf "%s\n" "zookeeper关闭成功!"
					else
						printf "%s\n" "zookeeper关闭失败!"
						printf "%s\n" "${close_results}"
					fi
				else
					#zookeeper未启动
					printf "%s\n" "zookeeper未启动!"
				fi
			else
				printf "%s\n" "kafka关闭失败!"
			fi
		else
			#kafka未启动,判断zookeeper是否已启动
			printf "%s\n" "kafka未启动!"
			if [[ $(pgrep -f "zookeeper*"|wc -l) -gt 0 ]];then
				#zookeeper已启动,关闭zookeeper
				close_results=`. ${zookeeper} stop 2>&1`
				#判断zookeeper是否关闭成功
				if [[ $(echo ${close_results}|grep "STOPPED") != "" ]];then
					#关闭成功
					printf "%s\n" "zookeeper关闭成功!"
				else
					#关闭失败
					printf "%s\n" "zookeeper关闭失败!"
					printf "%s\n" "${close_results}"
				fi
			else
				#zookeeper未启动
				printf "%s\n" "zookeeper未启动!"
			fi
		fi
		;;
	create)#创建topic
		if [[ $(pgrep -f "kafka*"|wc -l) -gt 0 ]];then
		topic_name=$2
		a=$3
		a1=${a:1}
		partitions=${a1:-1}
		b=$4
		b1=${b:1}
		replication=${b1:-1}
		cd "${kafka}"
		topic_created=$(./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor ${replication} --partitions ${partitions} --topic ${topic_name} 2>&1)
		printf "%s\n" "${topic_created}"
		else
			printf "%s\n" "kafka未启动!"
		fi
		;;
	list)#查看topic列表
		#判断kafka是否启动,没启动直接返回
		if [[ $(pgrep -f "kafka*"|wc -l) -gt 0 ]];then
			cd "${kafka}"
			topic_list=$(./kafka-topics.sh --list --zookeeper localhost:2181 2>$1)
			printf "%s\n" "topic列表如下:"
			printf "%s\n" "${topic_list}"
		else
			printf "%s\n" "kafka未启动!"	
		fi
		;;
	send)#发送kafka消息
		if [[ $(pgrep -f "kafka*"|wc -l) -gt 0 ]];then
		topic_name=$2
		cd "${kafka}"
		topic_list=$(./kafka-topics.sh --list --zookeeper localhost:2181 2>$1)
		#判断topic是否存在
		if [[ $(echo ${topic_list}|grep ${topic_name}) != "" ]];then
			#存在,发送消息到指定kafka
			./kafka-console-producer.sh --broker-list localhost:9092 --topic ${topic_name}
		else
			flag=0
			while (( ${flag} == 0 ))
			do
			#不存在,询问是否创建对应topic,是则创建
			read -p "topic 不存在,是否创建该名称topic[y/n]:" res 
			case $res in
			y | Y)
				flag=1
				read -p "请输入分区数以及副本数/以空格分隔:" p r
				partitions=$p
				replication=$r
				cd "${kafka}"
				topic_created=$(./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor ${replication} --partitions ${partitions} --topic ${topic_name} 2>&1)
				printf "%s\n" "${topic_created}"
			;;
			n | N)
				flag=1
			;;
			*)
				printf "%s\n" "输入不合法!"
			;;
			esac
			done
		fi
		else
			printf "%s\n" "kafka未启动!"
		fi
		;;
	*)#无匹配项
		printf "%s\n" "无匹配项,请携带入参"
		printf "%s\n" "start:启动kafka"
		printf "%s\n" "stop:关闭kafka"
		printf "%s\n" "create [topic名称] [p..] [r..]:创建topic p:分区数例如 p1为1个分区 r:分区副本例如 r1为1个副本"
		printf "%s\n" "list [topic名称]:查询kafka列表"
		printf "%s\n" "send [topic名称]:发送kafka消息"
		;;
esac
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值