kafka监控获取logSize, offset, lag等信息

本文介绍如何在SpringBoot项目中,通过Zookeeper获取Kafka的offset和logSize来计算消费信息的lag。当从特定链接无法获取offset时,选择直接从Zookeeper读取,提供获取groupId下所有topic的offset值的方法。

由于项目需要,需要查看kafka消费信息lag(lag = logSize - offset)

参考https://www.aliyun.com/jiaocheng/775267.html 的实现方式在有些场景无法获取offset的值(具体原因暂不知晓后续研究下)

因此决定直接从zookeeper中取offset值


一、springboot项目添加依赖

<dependency>
  <groupId>org.springframework.kafka</groupId>
  <artifactId>spring-kafka</artifactId>
</dependency>

二、相关代码

import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.concurrent.CountDownLatch;

import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.PartitionInfo;
import org.apache.kafka.common.TopicPartition;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class KafkaUtil {
	private static Logger logger = LoggerFactory.getLogger(KafkaUtil.class);
	private static final int ZOOKEEPER_TIMEOUT = 30000;
	private f
要查看 Kafka 中某个 Topic 的消费者滞后(Lag信息,可以通过以下几种方式实现: 1. **使用 Kafka 自带的命令行工具** Kafka 提供了 `kafka-consumer-groups.sh` 脚本来查询消费者组的状态信息,其中包括 Lag 情况。 命令格式如下: ```bash bin/kafka-consumer-groups.sh --bootstrap-server <broker_address> --describe --group <consumer_group_id> ``` 该命令会列出该消费者组下每个分区的 `CURRENT-OFFSET`、`LOG-END-OFFSET` 和 `LAG` 信息,其中 `LAG` 即为消费者滞后量[^2]。 2. **通过 Kafka 的管理 API 或监控工具** Kafka 提供了 Java API 来获取消费者组的运行状态,可以编写程序或使用第三方工具(如 Kafka Manager、Confluent Control Center)来实时监控 Lag 情况。 示例 Java 代码片段: ```java Properties props = new Properties(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); props.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); Set<TopicPartition> partitions = consumer.assignment(); Map<TopicPartition, Long> endOffsets = consumer.endOffsets(partitions); for (TopicPartition partition : partitions) { long committedOffset = consumer.committed(partition).offset(); long logEndOffset = endOffsets.get(partition); long lag = logEndOffset - committedOffset; System.out.println("Partition: " + partition + ", Lag: " + lag); } ``` 3. **集成监控系统(如 Prometheus + Grafana)** 可以利用 Kafka Exporter 将 Kafka 的运行指标(包括 LagOffsetLogSize 等)暴露给 Prometheus,再通过 Grafana 实现可视化监控。 安装 Kafka Exporter 后,Prometheus 配置示例如下: ```yaml scrape_configs: - job_name: 'kafka-exporter' static_configs: - targets: ['kafka-exporter-host:9308'] ``` 在 Grafana 中导入 Kafka Exporter 的 Dashboard 模板即可查看各 Topic 的 Lag 趋势图[^3]。 4. **使用 Python 脚本结合 InfluxDB 和 Grafana** 如果希望使用 Python 实现 Lag 监控,可以通过 `kafka-python` 库连接 Kafka 集群并获取 Lag 信息,然后将数据写入 InfluxDB 并在 Grafana 展示。 示例代码如下: ```python from kafka import KafkaConsumer from influxdb import InfluxDBClient consumer = KafkaConsumer(bootstrap_servers='localhost:9092', group_id='my-group') client = InfluxDBClient('localhost', 8086, 'root', 'root', 'kafka_metrics') for topic in consumer.topics(): for partition in consumer.partitions_for_topic(topic): tp = TopicPartition(topic, partition) committed = consumer.committed(tp) end_offset = consumer.end_offsets([tp])[tp] lag = end_offset - (committed or 0) json_body = [ { "measurement": "kafka_lag", "tags": { "topic": topic, "partition": partition }, "fields": { "lag": lag } } ] client.write_points(json_body) ``` 该脚本可定时运行,采集 Lag 数据并写入 InfluxDB,最终通过 Grafana 展示图形化监控结果[^3]。 ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值