shell脚步向kafka发送消息_shell脚本并发数据到kafka topic

本文介绍了如何使用Shell脚本并发地将数据发送到Kafka topic,以每秒发送大量数据的方式验证下游系统性能。脚本会更新文件中的时间戳并批量发送数据,同时展示了脚本的执行效果。
摘要由CSDN通过智能技术生成

shell脚本并发数据到kafka topic

需求:

每秒发送大量数据到kafka,验证下游系统性能,数据中的时间戳要求为当前时间,可以之间采集系统当前时间替换文件中旧的时间戳,保证每次发送的数据都为最新时间。

利用kafka自带的脚本,将待发数据写入文件中,然后通过读取文件 方式,将数据批量发送到kafka task节点

#在kafka master 节点用户home 目录下创建data 目录

[root@node1 home]# mkdir data

#进入data目录

[root@node1 home]# cd data/

#将准备好的数据放入data目录中

[root@node1 data]# ls

batch1-1000.log batch2-1000.log batch-send.sh

#编写batch-send.sh 脚本

[root@node1 data]# vi batch-send.sh

shell content:

#!/bin/bash

#响应Ctrl+C中断

trap 'onCtrlC' INT

function onCtrlC () {

echo 'Ctrl+C is captured'

exit 1

}

#kafka及data所在目录

dataPath=/home/data

kafkaPath=/usr/local/kafka

#broker list

brokerlist=192.168.1.10:9092,192.168.1.11:9092,192.168.1.12:9092

#kafka的topic,这里设置发送到2个kafka topic

topic1=test-topic1

topic2=test-topic2

#消息总数,可根据需要配置,实际数量是*num后的数,num取决于数据文件中的数据量

totalNum=100

#循环计时参数

batchNum=10

#开始时间

start=$(date +%s)

#打印循环开始时间

echo $(date)

for ((i=1; i<=${totalNum}; i ++))

do

{

#取余数

modVal=$(( ${i} % ${batchNum} ))

#如果循环计数达到设置参数,就发送一批次消息

if [ ${modVal} = 0 ] ; then

#在控制台显示进度,*num,取决于数据文件中的数据量

echo “$(( ${i}*100 )) of $(( ${totalNum}*100 )) sent”

# 获取每次循环发送的当前时间

current=`date "+%Y-%m-%d %H:%M:%S"`

# 将时间转为UTC 时间,精确到秒

timeStamp=`date -d "$current" +%s`

#将current转换为时间戳,精确到毫秒,10#`date "+%N"是为了避免循环过程中出现error:value too great for base

currentTimeStamp=$((timeStamp*1000+10#`date "+%N"`/1000000))

#每次循环发送数据前,都将数据文件中的recvTs 参数改为当前时间,放在前台执行,由于是顺序执行,需要等待文件修改完后,才会下一步执行发送文件数据给kafka,每个文件中1000条数据

sed -i 's/\("recvTs":\)[0-9]*\(,\)/\1'$currentTimeStamp',/g' ${dataPath}/batch1-1000.log ${dataPath}/batch2-1000.log

#批量发送消息,并且将控制台返回的提示符重定向到/dev/null,&放到后台并发执行

cat ${dataPath}/batch1-1000.log | ${kafkaPath}/bin/kafka-console-producer.sh --broker-list ${brokerlist} --sync --topic ${topic1} | > /dev/null &

cat ${dataPath}/batch1-1000.log | ${kafkaPath}/bin/kafka-console-producer.sh --broker-list ${brokerlist} --sync --topic ${topic1} | > /dev/null &

fi

}

#每个for循环等待0.1秒,batchNum=10,即每秒执行一次数据发送,

sleep 0.1

done

#脚本结束时间,并统计脚本执行时间,打印到控制台

end=$(date +%s)

echo $(date)

echo $(( $end - $start ))

脚本执行效果

[root@node1 data]# ./batch-send.sh

Sat Jan 30 16:15:53 CST 2021

“1000 of 10000 sent”

“2000 of 10000 sent”

“3000 of 10000 sent”

“4000 of 10000 sent”

“5000 of 10000 sent”

“6000 of 10000 sent”

“7000 of 10000 sent”

“8000 of 10000 sent”

“9000 of 10000 sent”

“10000 of 10000 sent”

Sat Jan 30 16:16:04 CST 2021

11

[root@node1 data]#

这可以通过修改文件中的数据量和循环计时参数,实现每秒发送10000 甚至100000 条数据到kafka。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值