RocketMQ 5.0 可观测能力升级: Metrics 指标分析介绍|学习笔记

本文涉及的产品
性能测试 PTS,5000VUM额度
应用实时监控服务-用户体验监控,每月100OCU免费额度
应用实时监控服务-应用监控,每月50GB免费额度
简介: 快速学习 RocketMQ 5.0 可观测能力升级: Metrics 指标分析介绍

开发者学堂课程消息队列 RocketMQ 5.0 云原生架构升级课程RocketMQ 5.0 可观测能力升级: Metrics 指标分析介绍学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1234/detail/18402


Rocket MQ 5.0 可观测能力升级: Metrics 指标分析介绍

 

内容介绍:

一、从消息的生命周期看 Rocket MQ 观测性

二、Rocket MQ 4.X Metrics 实现

三、Rocket MQ 5.X Metrics 实现

四、构建监控体系最佳实践

 

本次为大家介绍Rocket MQ 5.0可观测性系列的课程,本课程的主题是绕RocketMQ 5.0指标的分析。首先介绍本次课程的主要内容,分为四个部分,首先是从消息的整个生命周期来看Rocket MQ的观测性,其次是介绍Rocket MQ 4.0和Rocket MQ 5.0中Metrics区别和提升,最后是一些最佳实践的推荐

 

一、从消息的生命周期看 Rocket MQ 可观测性

首先介绍第一部分,从消息的生命周期看Rocket MQ 可观测性

image.png

可观测性能力是围绕着消息的生命周期构建的,所以在介绍Rocket MQ Metrics的功能之前,先要介绍Rocket MQ消息的生产堆积拉取消费的整个流程。

上图是生产者消费者和服务端交互的流程,可以看到Rocket MQ的消息是按照队列的方式有序储存的Rocket MQ的队列模型使得生产者消费者和读写队列之间都是多对多的映射关系。彼此之间都可以无限水平拓展,这一点传统的消息对比,比如Rocket MQ是很大的优势,尤其是在流式处理的场景下有着天然的优势,因为它能够保证同一队列的消息被相同的消费者处理,对于批量处理聚合处理更为友好。

image.png

接下来介绍消息的整个生命周期中需要关注的一些重要节点首先是消息发送,发送耗时是指一个消息从生产者开始生产消息开始发送到服务端接收并且储存到硬盘上的时间就是图中的前两部分如果是定时消息或者事务消息需要到达指定定时时间或者事务被提交才能被消费者可见。

image.png

接下来就是消息堆积的部分Rocket MQ提供了消息堆积的特性消息发送到服务端后并不一定立即拉取,可以按照客户端的消费能力进行投递这段时间中消息是被堆积在服务端的,也就是图中的ready time 至start pull time之间

image.png 

从消费者的角度来看需要关注的三个阶段首先是拉取消息消息从开始拉到抵达客户端的网络和服务端处理耗时,也就是pull RBC耗时,就是对应着图中的网络耗时这部分。第二个阶段是等待处理资源的阶段消息从抵达客户端开始到开始处理消息这一个流程。接下来介绍,从消费者的角度上看,需要关注的三个阶段首先是拉取消息的接口耗时,也就是消息从开始拉取到抵达客户端的网络和服务端处理耗时。对应的图中的网络耗时这部分第二部分是消息排队的时间,即消息到抵达客户端一直到开始消费这条消息这段等待资源的耗时。第三个阶段是消息消费耗时,即真正的消息逻辑的耗时,这就是消息从生产到消费的整个生命周期。

 

二、Rocket MQ 4.X  Metrics

接下来介绍Rocket MQ 4.0 中是如何围绕着生命周期进行 Metrics能力的建设

 image.png

Rocket MQ 4.0由exporter组件来实现的,Rocket MQ 团队贡献的Rocket MQ exporter 已经被Prometheus官方开源生态所收录。这个组件提供了broker 、producerconsumer等各个阶段丰富的监控指标图中列出了一些消费者相关的指标

image.png

接下来看一下exporter的原理,Rocket MQ exporter获取监控指标的流程如上图所示,首先通过MQ Admin Ext向Rocket MQ的集群请求数据,然后获取的数据在本地内存中转换成Prometheus需要的格式,然后通过 Metricspoint暴露出来Rocket MQ exporter过去确实一定程度上满足了对 Metrics能力的需要但是随着 Metrics操作模式的改变也逐渐暴露出一些缺陷

比如无法支持Rocket MQ 5.0中新加入一些组件,比如Prometheus的客观性需求,其实是的指标定义不符合开源标准。对无法无痛的接入一些Metrics的相关相关组件。

另外就是通过MQ Admin Ext向Rocket MQ的集群请求数据,造成大量的Rocket MQ调用,这种方式会带来额外的压力为了解决以上问题,Rocket MQ 5.0推出的基于open telemtry  Metrics策划案,就是要介绍的下一部分

 

三、Rocket MQ 5.X  Metrics 实现

image.png

Rocket MQ 5.0对Metrics的实现。它是CNCF的一个可观测性项目,在提供可观测性领域的标准化方案,解决观测数据的数据模型采集处理导出等标准化问题,提供与vendor无关的服务。Rocket MQ在设计新的Metrics方案决定遵循open telemtry 的社区规范,现在Metrics的指标完全是重新设计,数据类型选用兼容Prometheus的counterGuage、Histogram,并且完全遵循Prometheus指标的命令规范,经过重新设计的指标exporter的指标名字并不兼容,功能是完全可以替代的,新的指标覆盖了broker、proxy、producerconsumer等一些组对消息生命周期的全阶段提供监控的能力

image.png 

Rocket MQ新的Metrics指标分为两种方式首先介绍第一种指标上报pull模式pull模式只带Prometheus兼容,特别是在K8s部署环境中,如上图所示,Prometheus可以通过一些服务行业机制。比如示意的Prometheus可以直接从broker、或者proxy提供的endpoint中拉取数据无需部署额外的组

image.png

第二种指标上报方式是push模式,这也是open telemtry 推荐使用的模式,需要额外部署一个collector来传输指标数据broker将采集到的数据上报collector,然后collector再根据用户的配置对指标做一些自定义操作,比如指标的过滤化等。然后将处理好的指标上报到比如Prometheus这种的Metrics数据中。新的Metrics也支持对collector的兼容,现在使用Metrics的用户无需变更数据架构即可接入新的Metrics进行使用。而且有限公司对安全的要求是比较强的,应用和应用之间需要很强的隔离性。比如控制面的应用,可能就是这种和数据下的应用,比如Rocket MQ可能是需要隔离部署,因此接触过reporter来作为跨网络的一个代理来获取Metrics的数据也不失为一种比较好的选择。

image.png 

接下来具体看一下现在Metrics是如何实现对exporter模式的兼容Rocket MQ exporter中实现一个open telemtry collectorBroker将Metrics的数据导出到reporter中,reporter把这些数据转换成Prometheus的格式,为 Prometheus的访问提供了一个新的endpoint即图中所示的endpoint VR

 

四、构建监控体系最佳实践

介绍完Rocket MQ 5.0在Metrics的实现之后,接下来给出一些最佳实践的推荐,介绍如何根据Metrics的能力来构建我们的监控体系

image.png

Rocket MQMetrics能力以及对社区标准的遵循,使得可以轻而易举他借助一些开源组件,比如bronisry或者wehana来贡献监控体系。首先将broker或者是consumer指标采集到bronisry,然后就可以基于这些指标在wehana配出一些监护大牌,这里给出一些事例。上图中就是一些对接口耗时、成功失败率以及请求分布

image.png

上图是客户端的数量,客户的版本分布以及消息类型,消息大小的分布监控

image.png

上图是Broker一些状态监控,比如一patch延迟消息保留时间堆积比较多的topic、group,还有broker上的一些线上消息的堆积情况。

image.png 

有了完善的监控,就可以对需要关注的指标配置告警,而收到告警后又可以联动监控来分析告警的具体原因。上图所示,收到了一个消息延迟的告警,可以通过监控看到本次延迟的原因是有一定的消费失败,然后消费失败的具体原因可以右边的界面,可以看到是因为订阅并不存在。通过告警和监控的互相配合,就可以做到快速发现问题,快速定位问题现在以一个实际例子来介绍如何通过Metrics分析堆积问题

image.png 

先回顾一下之前讲解过的消息生命周期,对于堆积问题,主要关注消息周期阶段第一个阶段是就绪消息,就绪消息是可供消费,但还被拉消息,即在服务端堆积的消息,对应图中的绿色部分第二阶段是处理中的消息处理中的消息是指被客户端拉,但是还未被消费的消息,也就是在客户端对应的消息,对应图中的色阶段

关于就绪消息和处理中消息我们提供了

rocketmq_consumer_ready_messages

和rocketmq_consumer_inflight_messages这两个指标,结合这两个指标和其他指标以及对客户端配置的综合分析,即可判断出消息堆积的原因以下举几个真实的case具体情况具体分析首先第一个case就绪消息的数量持续上涨,而处理中的消息达到客户端的堆积上限后几乎不变这是最常见的堆积场景客户端处理中的消息量达到了客户端配置的最高阈值消费者的消费能力低于消息的发送速度,此时需要根据业务的需要灵活决定是增加消费者数量来尽快的调节消息,还是等待业务高峰过去之后再慢慢消化堆积的消息

接下来介绍第二个case,就绪消息几乎为零,而处理中的消息持续上涨这个case一般出现在使用Rocket MQ 4.0的客户端场景,此时消费的位点是按消费顺序来进行提交的,如果某条消息的消费卡就会导致当前的消费位点无法提交,现象就是消息在客户端的大量堆积。可以结合消费轨迹和rocketmq_process_time这个指标抓消费的消息,并分析这条消息消费的上下游链路,找到消息消费慢的根因。

之后介绍第三个case,就绪消息持续上涨,但是处理中的消息几乎为零

这种场景说明客户端没有拉取到消息,一般来说有如下几种情况第一种情况是遇到了鉴权问题如果开启了ACL或者使用了公有云的消息产品,那么检查一下资源是否有权限第二种情况是消费者夯住,这时候我们可以尝试打印线程堆栈或者gc信息,判断是否进程夯住,在哪里针对做一个解决方案最后一种情况是服务端响应比较慢,可以结合RPC相关的指标查看拉取消息接口的调用量和耗时检查是否正常来判断是否为客户端的问题,比如遇到磁盘IO打满这类情况

以上是本次课程的全部内容

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
5月前
|
消息中间件 人工智能 Apache
Apache RocketMQ 中文社区全新升级!
RocketMQ 中文社区升级发布只是起点,我们将持续优化体验细节,推出更多功能和服务,更重要的是提供更多全面、深度、高质量的内容。
603 18
|
4月前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
291 2
|
6月前
|
消息中间件 安全 API
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
312 1
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(1)
|
6月前
|
消息中间件 安全 Apache
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(4)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
193 1
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(4)
|
6月前
|
消息中间件 安全 Apache
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(2)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
264 0
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(2)
|
4月前
|
消息中间件 存储 Cloud Native
RocketMQ从4.9.7 升级到5.3.0有什么变化?
【8月更文挑战第25天】RocketMQ从4.9.7 升级到5.3.0有什么变化?
300 4
|
4月前
|
消息中间件 存储 数据中心
RocketMQ的长轮询(Long Polling)实现分析
文章深入分析了RocketMQ的长轮询实现机制,长轮询结合了推送(push)和拉取(pull)两种消息消费模式的优点,通过客户端和服务端的配合,确保了消息的实时性同时将主动权保留在客户端。文中首先解释了长轮询的基本概念和实现步骤,然后通过一个简单的实例模拟了长轮询的过程,最后详细介绍了RocketMQ中DefaultMQPushConsumer的长轮询实现方式,包括PullMessage服务、PullMessageProcessor服务和PullCallback回调的工作原理。
127 1
|
5月前
|
消息中间件 安全 API
Apache RocketMQ ACL 2.0 全新升级
RocketMQ 作为一款流行的分布式消息中间件,被广泛应用于各种大型分布式系统和微服务中,承担着异步通信、系统解耦、削峰填谷和消息通知等重要的角色。随着技术的演进和业务规模的扩大,安全相关的挑战日益突出,消息系统的访问控制也变得尤为重要。然而,RocketMQ 现有的 ACL 1.0 版本已经无法满足未来的发展。因此,我们推出了 RocketMQ ACL 2.0 升级版,进一步提升 RocketMQ 数据的安全性。本文将介绍 RocketMQ ACL 2.0 的新特性、工作原理,以及相关的配置和实践。
13665 11
|
4月前
|
消息中间件 人工智能 监控
|
7月前
|
消息中间件 安全 API
Apache RocketMQ ACL 2.0 全新升级
RocketMQ ACL 2.0 不管是在模型设计、可扩展性方面,还是安全性和性能方面都进行了全新的升级。旨在能够为用户提供精细化的访问控制,同时,简化权限的配置流程。欢迎大家尝试体验新版本,并应用在生产环境中。
188819 166