当前位置: 首页 > news >正文

如何监控Kafka的Lag(消费延迟)?

监控Kafka消费延迟(Lag)主要有以下几种方法:

  1. 使用Kafka自带命令行工具
# 查看消费者组lag
kafka-consumer-groups.bat --bootstrap-server localhost:9092 --group your_group --describe

输出结果中的LAG列显示各分区的延迟消息数,CURRENT-OFFSET是当前消费位移,LOG-END-OFFSET是生产端最新位移

  1. 通过JMX指标监控
    Kafka Broker暴露的JMX指标:
  • kafka.consumer:type=consumer-fetch-manager-metrics,client-id=([-.\w]+)下的records-lag-max
  • kafka.consumer:type=consumer-fetch-manager-metrics,partition=([-.\w]+),topic=([-.\w]+),client-id=([-.\w]+)下的records-lag
  1. 使用Prometheus + Grafana监控
    安装Kafka Exporter:
wget https://github.com/danielqsj/kafka_exporter/releases/download/v1.6.1/kafka_exporter-1.6.1.windows-amd64.tar.gz
tar -xzf kafka_exporter-1.6.1.windows-amd64.tar.gz
cd kafka_exporter-1.6.1.windows-amd64
kafka_exporter.exe --kafka.server=localhost:9092

在Grafana中导入Kafka仪表板(如ID 7589)

  1. 编程方式获取(Java示例)
Properties props = new Properties();
props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");try (AdminClient admin = AdminClient.create(props)) {ListConsumerGroupOffsetsResult result = admin.listConsumerGroupOffsets("your_group");Map<TopicPartition, OffsetAndMetadata> offsets = result.partitionsToOffsetAndMetadata().get();// 获取各分区最新offsetList<TopicPartition> partitions = offsets.keySet().stream().collect(Collectors.toList());Map<TopicPartition, Long> endOffsets = admin.listOffsets(partitions.stream().collect(Collectors.toMap(Function.identity(), tp -> OffsetSpec.latest()))).all().get().entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().offset()));// 计算lagoffsets.forEach((tp, offsetMeta) -> {long lag = endOffsets.get(tp) - offsetMeta.offset();System.out.printf("分区 %s Lag: %d%n", tp, lag);});
}
  1. 使用Confluent Control Center(需企业版)
    提供可视化监控界面,可以直接查看消费者组的实时Lag指标和历史趋势

建议同时监控:

  • 单个分区的最大Lag值
  • 消费者组的平均Lag
  • Lag随时间的变化趋势
  • 设置阈值告警(如Lag持续超过1000条消息时触发告警)
http://www.xdnf.cn/news/299035.html

相关文章:

  • 如何使用 QuickAPI 推动汽车行业数据分享:数据仓库场景下的实践
  • SQL Server 备份加密和解密还原
  • Linux 系统上安装 Firefox 浏览器的完整指南
  • [人机交互]理解用户
  • 简单介绍分布式定时任务XXL-JOB
  • 大数据产品销售数据分析:基于Python机器学习产品销售数据爬虫可视化分析预测系统设计与实现
  • 数据分析汇报七步法:用结构化思维驱动决策
  • OrangePi Zero 3学习笔记(Android篇)1 - 搭建环境
  • 第三节:Vben Admin 最新 v5.0 对接后端登录接口(下)
  • 【愚公系列】《Manus极简入门》022-艺术创作顾问:“艺术灵感使者”
  • Vue3路由模式为history,使用nginx部署上线后刷新404的问题
  • 【IP101】图像特征提取技术:从传统方法到深度学习的完整指南
  • R 语言科研绘图第 45 期 --- 桑基图-和弦
  • Factorio 异星工厂 [DLC 解锁] [Steam] [Windows SteamOS]
  • JAVA SE(9)——多态
  • Axure疑难杂症:深度理解与认识“事件”“动作”(玩转交互)
  • 数据中台产品功能介绍
  • Rice Science∣武汉大学水稻研究团队发现水稻壁相关激酶OsWAKg16和OsWAKg52同时调控水稻抗病性和产量
  • CSS中的@import指令
  • 深入解析二维矩阵搜索:LeetCode 74与240题的两种高效解法对比
  • 【C++游戏引擎开发】第31篇:物理引擎(Bullet)—碰撞检测系统
  • 质量员考试案例题有哪些常见考点?
  • K8S PV 与 PVC 快速开始、入门实战
  • C++负载均衡远程调用学习之集成测试与自动启动脚本
  • Spark,所用几个网页地址
  • PaddlePaddle 和PyTorch选择与对比互斥
  • NSSM 完全指南:如何将任意程序部署为 Windows 服务
  • OpenHarmony GPIO应用开发-LED
  • 搭建一个简单的博客界面(前端HTML+CSS+JS)
  • 《AI大模型应知应会100篇》第50篇:大模型应用的持续集成与部署(CI/CD)实践