Kafka运维小贴士 | Kafka 消息监控
笔者经常遇到一些无法优化的慢查询,面对这样的慢查询,笔者会将其进行预先计算存储到mongodb或者elasticsearch中。这个业务场景需要将mysql的binlog数据发送到kafka,然后订阅kafka并消费其中的binlog数据以实现实时加速查询。但是消费binlog就可能会有很多意外发生,比如mysql数据库发生死锁,或者消费发生并发问题,网络长时间阻塞,这些状况都会导致kafka消费发生阻塞,一旦发生阻塞,用户从mongodb或者elasticsearch中就会查询不到最新的mysql数据,所以笔者需要监控kafka中消息的消费情况,监控的方案有很多,笔者进行了整理,以便日后回顾。
kafka-consumer-groups
kafka-consumer-groups.sh是kafka自带的工具,它位于kafka安装目录的bin目录下,它不需要额外下载安装,使用起来非常方便
通过如下命令,我们可以查看kafka的所有消费组
./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --list
它的输出如下所示,可以看到其中有一个Test-Group的消费组
我们可以通过如下方式查看某个消费组的消费情况
./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --describe --group Test-Group
输出结果如下
上述涉及的几个字段意义如下
TOPIC:主题名字
PARTITION:分区id
CURRENT-OFFSET:已经提交的消费位移
LOG-END-OFFSET:总数据量
LAG:未消费的数据量
CONSUMER-ID:代表消费者id,为空代表当前没有消费者
HOST:消费者主机ip,为空代表当前没有消费者
CLIENT-ID:客户端id,为空代表当前没有消费者
kafka-manager
kafka-manager要比kafka-consumer-groups工具强大的多,它不仅可以用于查看消费者消费情况,同时可以管理Topic,包括创建topic,管理partition。
从下面地址下载kafka-manager的安装包
http://github.com/yahoo/kafka-manager/releases
解压并进入kafka安装目录,使用sbt进行编译,sbt需要配置源,否则编译速度非常慢
sbt clean dist
将编译好的zip格式文件复制出来,解压缩,修改conf目录下的application.conf文件,修改zookeeper地址参数kafka-manager.zkhosts,在bin目录下执行./kafka-manager命令,kafka默认端口是9000,进入管理页面之后配置kafka节点相关信息,就能监控kafka运行情况
如下是kafka-manager的管理界面
查看所有的消费组
Broker管理的partition列表
某个消费组消费某个topic的消费状况
- 《Spark快速大数据分析》—— 第七章 在集群上运行Spark
- 以后去Vero Moda买衣服,可以问会“看脸”的AI导购了
- Tensorflow新手通过PlayGround可视化初识神经网络
- [大数据之Spark]——快速入门
- [大数据之Spark]——Actions算子操作入门实例
- [大数据之Spark]——Transformations转换入门经典实例
- 字符串的排列
- 斐波那契额数列及青蛙跳台阶问题
- 在Mac OS X上配置Apache2
- 合并两个排序的链表
- 还有5天,你的比特币最重要的孩子UB-UBTC 可能就永远不属于你了
- Spark SQL 用户自定义函数UDF、用户自定义聚合函数UDAF 教程(Java踩坑教学版)
- Webpack多入口文件、热更新等体验
- 从hello world 解析程序运行机制
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法