发送kafka消息的shell脚本开发和学习时需要造⼀些kafka消息,于是写了段脚本实现,在这⾥记录备忘,后⾯会常⽤到;环境信息
1. Kafka:
2.0.1
2. Zookeeper:
3.5.5
3. shell脚本运⾏环境:MacBook Pro (系统:10.15.3 (19D76))
脚本内容
1. 下⾯是脚本sendmessage.sh的内容,带有详细注释:
#!/bin/sh
#响应Ctrl+C中断
trap'onCtrlC' INT
function onCtrlC (){
echo'Ctrl+C is captured'
exit 1
}
#kafka所在⽬录
kafkaPath=/Users/zhaoqin/temp/202003/07/kafka_2.11-2.0.1
#broker
brokerlist=192.168.50.135:31090,192.168.50.135:31091,192.168.50.135:31092
#kafka的topic
topic=test001
#消息总数
totalNum=10000
#⼀次批量发送的消息数
batchNum=100
#该标志为true,表⽰⽂件中的第⼀条记录
firstLineFlag='true'
for((i=1; i<=${totalNum}; i ++))
do
#消息内容,请按照实际需要⾃⾏调整
messageContent=batchmessage-${i}-`date"+%Y-%m-%d %H:%M:%S"`
#如果是每个批次的第⼀条,就要将之前的内容全部覆盖,如果不是第⼀条就追加到尾部
if['true'==${firstLineFlag}];then
echo${messageContent}>
#将标志设置为false,这样下次写⼊的时候就不会清理已有内容了
firstLineFlag='false'
else
echo${messageContent}>>
fi
#取余数
modVal=$(( ${i} % ${batchNum} ))
#如果达到⼀个批次,就发送⼀次消息
if[${modVal}= 0 ];then
#在控制台显⽰进度
echo “${i} of ${totalNum} sent”
#批量发送消息,并且将控制台返回的提⽰符重定向到/dev/null
|${kafkaPath}/bin/kafka-console-producer.sh --broker-list ${brokerlist} --sync --topic ${topic}|> /dev/null #将标志设置为true,这样下次写⼊时,会将⽂件中的内容先清除掉
firstLineFlag='true'
fi
donekafka常用命令
2. kafkaPath是客户端电脑上kafka安装的路径,请按实际情况修改;
3. brokerlist是远程kafka信息,请按实际情况修改;
4. topic是要发送的消息Topic,必须是已存在的Topic;
5. totalNum是要发送的消息总数;
6. batchNum是⼀个批次的消息条数,如果是100,表⽰每攒齐100条消息就调⽤⼀次kafka的shell,然后逐条发送;
7. messageContent是要发送的消息的内容,请按实际需求修改;
运⾏脚本
1. 给脚本可执⾏权限:chmod a+x sendmessage.sh
2. 执⾏:./sendmessage.sh
3. 每到⼀百条会有⼀次进度提醒:
(base) zhaoqindeMBP:07 zhaoqin$ ./sendmessage5.sh
“100 of 10000 sent”
“200 of 10000 sent”
“300 of 10000 sent”
“400 of 10000 sent”
“500 of 10000 sent”
“600 of 10000 sent”
“700 of 10000 sent”
“800 of 10000 sent”
...
4. ⽤shell命令消息此消息:
./kafka-console-consumer.sh \
--bootstrap-server 192.168.50.135:31090 \
--topic test001 \
--from-beginning
5. 可以看到内容符合预期:
6. 如果安装了监控,也能看到消息发送正常:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论