发送kafka消息的shell脚本

举报
程序员欣宸 发表于 2022/11/15 08:15:48 2022/11/15
【摘要】 开发和学习时需要造一些kafka消息,于是写了段脚本实现,在这里记录备忘,后面会常用到

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

  • 开发和学习时需要造一些kafka消息,于是写了段脚本实现,在这里记录备忘,后面会常用到;

环境信息

  1. Kafka:2.0.1
  2. Zookeeper:3.5.5
  3. shell脚本运行环境:MacBook Pro (系统:10.15.3 (19D76))

脚本内容

  • 下面是脚本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} > batchMessage.txt

      #将标志设置为false,这样下次写入的时候就不会清理已有内容了
      firstLineFlag='false'
    else
      echo ${messageContent} >> batchMessage.txt
    fi

    #取余数
    modVal=$(( ${i} % ${batchNum} ))

    #如果达到一个批次,就发送一次消息
    if [ ${modVal} = 0 ] ; then
      #在控制台显示进度
      echo${i} of ${totalNum} sent”

      #批量发送消息,并且将控制台返回的提示符重定向到/dev/null
      cat batchMessage.txt | ${kafkaPath}/bin/kafka-console-producer.sh --broker-list ${brokerlist} --sync --topic ${topic} | > /dev/null

      #将标志设置为true,这样下次写入batchMessage.txt时,会将文件中的内容先清除掉
      firstLineFlag='true'
    fi
done
  • kafkaPath是客户端电脑上kafka安装的路径,请按实际情况修改;
  • brokerlist是远程kafka信息,请按实际情况修改;
  • topic是要发送的消息Topic,必须是已存在的Topic;
  • totalNum是要发送的消息总数;
  • batchNum是一个批次的消息条数,如果是100,表示每攒齐100条消息就调用一次kafka的shell,然后逐条发送;
  • messageContent是要发送的消息的内容,请按实际需求修改;

运行脚本

  • 给脚本可执行权限:chmod a+x sendmessage.sh
  • 执行:./sendmessage.sh
  • 每到一百条会有一次进度提醒:
(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”
...
  • 用shell命令消息此消息:
./kafka-console-consumer.sh \
--bootstrap-server 192.168.50.135:31090 \
--topic test001 \
--from-beginning
  • 可以看到内容符合预期:
    在这里插入图片描述
  • 如果安装了监控,也能看到消息发送正常:
    在这里插入图片描述

欢迎关注华为云博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴…

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。