Kafka消费者组消费进度监控

针对Kafka消费者,重要的就是监控消费进度或者是消费的滞后程度,有个专业名词 消费者 Lag 或 Consumer Lag。

滞后程度(Consumer Lag)是指消费者当前落后生产者的程度。比如Kafka 生产者向某主题成功生产了 100 万条消息,你的消费者当前消费了 80 万条消息,那么我们就说你的消费者滞后了 20 万条消息,即 Lag 等于 20 万。

Lag的单位是消息数,其实Lag的监控是在分区级别上(因为消费者消费的是分区里面的消息数),若要在topic的层级上进行监控,需要把该topic的所以分区Lag进行相加。

监控消费者Lag的几种方法:

  1. 使用 Kafka 自带的命令行工具 kafka-consumer-groups 脚本。
  2. 使用 Kafka Java Consumer API 编程。
  3. 使用 Kafka 自带的 JMX 监控指标。
  4. 一些开源的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.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Java语言编写的Kafka消费者代码示例: ```java import java.util.Properties; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.common.serialization.StringDeserializer; public class KafkaConsumerGroupExample { private final static String TOPIC_NAME = "test_topic"; private final static String GROUP_ID = "test_group"; private final static String BOOTSTRAP_SERVERS = "localhost:9092,localhost:9093,localhost:9094"; public static void main(String[] args) { Properties props = new Properties(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS); props.put(ConsumerConfig.GROUP_ID_CONFIG, GROUP_ID); props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); consumer.subscribe(Collections.singletonList(TOPIC_NAME)); while (true) { ConsumerRecords<String, String> records = consumer.poll(1000); for (ConsumerRecord<String, String> record : records) { System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value()); } } } } ``` 在这个示例中,我们创建了一个Kafka消费者对象,并向其传递了一些配置参数,包括bootstrap.servers、group.id、key.deserializer和value.deserializer等参数。然后,我们将消费者订阅了一个主题(test_topic),并在一个无限循环中不断地拉取消息并进行处理。在处理消息的过程中,我们可以使用ConsumerRecord对象获取消息的偏移量(offset)、键(key)和值(value)等信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值