针对Kafka消费者,重要的就是监控消费进度或者是消费的滞后程度,有个专业名词 消费者 Lag 或 Consumer Lag。
滞后程度(Consumer Lag)是指消费者当前落后生产者的程度。比如Kafka 生产者向某主题成功生产了 100 万条消息,你的消费者当前消费了 80 万条消息,那么我们就说你的消费者滞后了 20 万条消息,即 Lag 等于 20 万。
Lag的单位是消息数,其实Lag的监控是在分区级别上(因为消费者消费的是分区里面的消息数),若要在topic的层级上进行监控,需要把该topic的所以分区Lag进行相加。
监控消费者Lag的几种方法:
- 使用 Kafka 自带的命令行工具 kafka-consumer-groups 脚本。
- 使用 Kafka Java Consumer API 编程。
- 使用 Kafka 自带的 JMX 监控指标。
- 一些开源的kafak监控,比如kafka-export、kminion
Kafka自带命令监控:
$ bin/kafka-consumer-groups.sh --bootstrap-server <Kafka broker 连接信息 > --describe --group <group 名称 >
输出信息:消费组、主题、分区,它会汇报每个分区当前最新生产的消息的位移值(即 LOG-END-OFFSET 列值)、该消费者组当前最新消费消息的位移值(即 CURRENT-OFFSET 值)、LAG 值(前两者的差值)、消费者实例 ID、消费者连接 Broker 的主机名以及消费者的 CLIENT-ID 信息
Kafka JVM监控指标
使用kafka 默认的jvm监控指标进行监控Lag的值。
Kafka 消费者提供了一个名为 kafka.consumer:type=consumer-fetch-manager-metrics,client-id=“{client-id}”的 JMX 指标,里面有很多属性。跟消费者消费进度的有两组属性:records-lag-max 和 records-lead-min,它们分别表示此消费者在测试窗口时间内曾经达到的最大的 Lag 值和最小的 Lead 值。
这里的 Lead 值是指消费者最新消费消息的位移与分区当前第一条消息位移的差值。很显然,Lag 和 Lead 是一体的两个方面:Lag 越大的话,Lead 就越小,反之也是同理。
引入lead值监控的原因:
Lag值越来越大,说明消费者消费速度是越来越慢,但是一旦lead值越来越小,甚至快接近0,说明消费者端可能丢消息。
监控分区级别的Lag和Lead:
JMX 名称为:kafka.consumer:type=consumer-fetch-manager-metrics,partition=“{partition}”,topic=“{topic}”,client-id=“{client-id}”
kminion监控kafka:
参考github地址:GitHub - redpanda-data/kminion: KMinion is a feature-rich Prometheus exporter for Apache Kafka written in Go. It is lightweight and highly configurable so that it will meet your requirements.