最直接的kafka阻塞监控系统 拿来就能用的那种!不用谢我 多夸夸我就行

#!/bin/bash

cd /home/kafka/kafka_2.11-1.1.0 (此处是先进入kafka文件夹内部 好启动lag值脚本)

send_mail(){
   echo "$i队列LAG值为$lag" |mail -s "$i队列未消费offset超出$lag个" -c 这里填上自己的邮箱(但是需要提前安装mailsend插件)
}

当然上面是如果超过阈值就给哪些责任人发送邮件,有的公司是其他警告系统,例如钉钉警报 就要换一个方式

for i in topic 
do
 lag=`bin/kafka-consumer-groups.sh --describe --bootstrap-server IP集群 --group groupID |grep $i | awk '{print $5}'|sed ':a;N;$!ba;s/LAG/0/;s/\n/+/g' |bc`


 if [ $i = topic -a $lag -gt 阈值 ];then
   send_mail(发送邮件)
 fi
done

 

至于为什么使用for循环,因为有的时候,可能一个group会消费多个topic,所以使用for循环就可以一个脚本监控一个group消费多个topic的情况

此监控最小单位可以到分区 不过awk处就要修改一下

还有 如果监控的kafka offset保存到zk中的,拿ip集群就要写zk集群

 

        最后解释一下此监控系统的原理。

首先lag是什么?

lag是滞后量,肯定大于等于0,无法为负数,值越大阻塞越严重。直白点解释就是你生产者生产了的最新的消息编号-消费者已经消费的数量=lag,官方我记得叫hw-offset=lag 记不太清了

然后这个lag,kafka自带一个脚本kafka-consumer-groups.sh,执行就可以得到所有分区的lag,然后用awk、sed来操作文档,获取总lag,然后如果数量大于贵公司的容忍范围,就报警,但由于有的时候可能生产者就是突然拉取了一票消息,突然很大,但其实也能瞬间消费完,所以最好的就是在加一层判断,如果第一次大于阈值,然后第二次大于第一次的lag,那么才是真的可能阻塞了。代码就大伙自己写把。

你可能感兴趣的:(Kafka)