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

RocketMQ 可观测性最佳实践

RocketMQ 概述

Apache RocketMQ 是一个开源的分布式消息传递和流处理平台,由阿里巴巴团队最初开发并捐赠给 Apache 软件基金会。它主要用于处理大规模消息的发送和接收,支持高吞吐量、可扩展性强且具有高可用性的消息服务。

RocketMQ 的优势有以下几点:

  • 高性能: RocketMQ 能够支持每秒处理百万级消息的高吞吐量,满足企业级应用的需求。
  • 高可用性: 支持故障转移和消息冗余,保证消息不丢失,实现99.999%的高可用性。
  • 可扩展性: 结构支持水平扩展,无需停机即可增加节点,极大地提高了系统的灵活性和可扩展性。
  • 多语言客户端支持: 除了Java,RocketMQ 还提供了 C++、Python、Go 等多种语言的客户端,满足不同开发需求。
  • 易于监控和维护: 提供了丰富的监控指标和管理工具,帮助运维人员轻松管理和监控消息系统的状态。

RocketMQ 是一个功能强大的消息中间件,适用于需要高可靠性、高性能和高可扩展性的现代互联网、金融和电信等领域的企业级应用。

观测云

部署 DataKit

DataKit 是一个开源的、跨平台的数据收集和监控工具,由观测云开发并维护。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。

登录观测云控制台,在「集成」 - 「DataKit」选择对应安装方式,当前采用 Linux 主机部署 DataKit。

安装 RocketMQ Exporter

通过 RocketMQ Exporter 可以采集 RocketMQ 的指标信息并对外暴露。

  • 拉取 rocketmq-exporter
git clone https://github.com/apache/rocketmq-exporter.git

进入安装目录

cd rocketmq-exporter/
  • 构建安装包(2选1)

1)构建 jar 包方式

mvn clean package

构建完成,进入 target 目录

cd target

启动 jar 包 (替换命令行中 nameserverip 地址)

nohup java -jar target/rocketmq-exporter-0.0.2-SNAPSHOT.jar --rocketmq.config.namesrvAddr=nameserverip:9876 &

2)构建 Docker 镜像方式

mvn package -Dmaven.test.skip=true docker:build

使用镜像启动 Docker (替换命令行中 nameserverip 地址)

docker run -d --net="host" --name rocketmq-exporter -p 5557:5557 docker.io/rocketmq-exporter --rocketmq.config.namesrvAddr=nameserverip:9876
  • 测试 rocketmq-exporter 是否正常
curl http://127.0.0.1:5557/metrics

采集 RocketMQ 指标

RocketMQ Exporter 暴露指标端口为:5557,可以直接通过 prom 采集器进行采集。进入 DataKit 安装目录 /usr/local/datakit/conf.d ,复制 prom 目录下的配置文件并命名为 rocketmq.conf 。 示例如下:

开启 DataKit Prometheus 插件,复制 sample 文件

cd /usr/local/datakit/conf.d/prom
cp prom.conf.sample rocketmq.conf

修改配置文件 rocketmq.conf

[[inputs.prom]]urls = ["http://127.0.0.1:5557/metrics"]ignore_req_err = falsesource = "rocketmq"
# metric_types 需要选择空,rocketmq-exporter 没有指定数据类型metric_types = []interval = "60s"

重启 DataKit

datakit service restart

监控视图

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “RocketMQ”, 选择“RocketMQ 监控视图”,点击“确定”。

关键指标

序号指标名称指标描述
1rocketmq_broker_tpsbroker每秒生产消息数量
2rocketmq_broker_qpsbroker每秒消费消息数量
3rocketmq_producer_tps某个topic每秒生产的消息数量
4rocketmq_producer_message_size某个生产者发送消息的平均消息大小(字节)
5rocketmq_producer_offset某个topic的生产消息的进度
6rocketmq_consumer_tps某个消费组每秒消费的消息数量
7rocketmq_consumer_message_size某个消费者拉取消息的平均消息大小(字节)
8rocketmq_consumer_offset某个消费组的消费消息的进度
9rocketmq_group_get_latency_by_storetime某个消费组的消费延时时间
10rocketmq_group_diff消费组的消息积压量

rocketmq_broker_tps ( broker 每秒生产消息数量)

  • 这个指标显示了每秒中 Broker 接收的消息数量,是衡量消息生产活动高低的直接指标。监控这一指标可以帮助运维团队了解系统当前的负载能力和处理能力。

rocketmq_broker_qps ( broker 每秒消费消息数量)

  • 相对于生产消息数量,这个指标显示的是 Broker 每秒处理的消费请求数量。这不仅反映了消费者的活跃程度,还可以用来评估 Broker 处理消费请求的效率。

rocketmq_producer_tps (某个 topic 每秒生产的消息数量)

  • 特定 Topic 的生产速率能够帮助运维团队识别特定业务流的压力情况。通过监控这一指标,可以及时发现某个业务线可能存在的问题或者性能瓶颈。

rocketmq_consumer_tps (某个消费组每秒消费的消息数量)

  • 这个指标展示了消费组的消费能力,通过监控可以了解消费组的处理效率和及时性。若消费速度跟不上生产速度,可能需要扩展消费者数量或优化消费逻辑。

rocketmq_group_diff (消费组堆积量指标)

  • 这个指标展示了消费组的消息积压量,通过监控可以了解某个消费组对指定 Topic 的未消费消息数量,监控消费组的消费能力是否正常。

rocketmq_group_get_latency_by_storetime (某个消费组的消费延时时间)

  • 这个指标显示了消息从存储到被消费组消费的延时。它是衡量消息系统响应能力的关键指标,对于要求实时性较高的应用尤其重要。

监控器

1)rocketmq_broker_tps ( broker 每秒生产消息数量)

阈值建议: 如果您的系统通常运行在每秒1000条消息,可以设置一个上限阈值为1500条,下限阈值为500条。

监控告警:

  • 高阈值告警: 如果 TPS 超过1500条/秒,发送告警,因为可能出现生产过载。
  • 低阈值告警: 如果 TPS 低于500条/秒,发送告警,可能存在生产中断或性能下降。

2)rocketmq_group_diff (消费组堆积量指标)

阈值建议:根据实际业务的吞吐量和消息处理需求设置阈值告警。

3)rocketmq_consumer_tps (某个消费组每秒消费的消息数量)

阈值建议: 如果正常消费速度为每秒800条,可以设置一个阈值下限为400条。

监控告警:

  • 低阈值告警: 如果消费 TPS 低于400条/秒,发出告警。这可能意味着消费者处理能力不足或存在系统故障。

4)rocketmq_group_get_latency_by_storetime (某个消费组的消费延时时间)

阈值建议: 如果延时通常在5秒以内,可以设置告警阈值为10秒。

监控告警:如果延时超过10秒,发送告警。高延时可能影响业务操作的实时性,需检查并解决问题。

http://www.lryc.cn/news/543611.html

相关文章:

  • P9420 [蓝桥杯 2023 国 B] 子 2023
  • OpenAI开放Deep Research权限,AI智能体大战升级,DeepSeek与Claude迎来新对决
  • 学习笔记04——JMM内存模型
  • 将VsCode变得顺手好用(1
  • Fisher信息矩阵(Fisher Information Matrix,简称FIM)
  • Vue2+Three.js加载并展示一个三维模型(提供Gitee源码)
  • Linux红帽:RHCSA认证知识讲解(三)Linux基础指令与Vim编辑器的使用
  • python读取sqlite温度数据,并画出折线图
  • 《论企业集成平台的理解与应用》审题技巧 - 系统架构设计师
  • UE Python笔记
  • 使用django调用deepseek api,搭建ai网站
  • YOLOv12 ——基于卷积神经网络的快速推理速度与注意力机制带来的增强性能结合
  • 两台互通的服务器使用Docker部署一主两从MySQL8.0.35
  • Java23种设计模式案例
  • stm32hal库寻迹+蓝牙智能车(STM32F103C8T6)
  • JavaScript知识点4
  • 形式化数学编程在AI医疗中的探索路径分析
  • QT 引入Quazip和Zlib源码工程到项目中,无需编译成库,跨平台,加密压缩,带有压缩进度
  • Ubuntu 安装 Nginx并配置反向代理
  • GitHub SSH连接问题解决指南
  • C++ 跨平台的 GetCurrentThreadId() 获取当前线程ID实现
  • 钉钉MAKE AI生态大会思考
  • SQL笔记#复杂查询
  • 【Linux】基于UDP/TCP套接字编程与守护进程
  • springboot 引入前端
  • RTSP/Onvif安防平台EasyNVR接入EasyNVS显示服务缺失的原因与解决方案
  • 算法系列之回溯算法
  • Uniapp 小程序接口封装与使用
  • Harmony开发笔记(未完成)
  • 观成科技:海莲花“PerfSpyRAT”木马加密通信分析