消息队列rocketmq遇上可观测:业务核心链路可视化

阿里云云栖号 阿里云云栖号     2023-03-09     639

关键词:

简介:本篇文章主要介绍 RocketMQ 的可观测性工具在线上生产环境的最佳实践。RocketMQ的可观测性能力领先业界同类产品,RocketMQ 的 Dashboard 和消息轨迹等功能为业务核心链路保驾护航,有效应对线上大规模生产使用过程中遇到的容量规划、消息收发问题排查以及自定义监控等场景。

作者:文婷、不周

引言:本篇文章主要介绍 RocketMQ 的可观测性工具在线上生产环境的最佳实践。RocketMQ的可观测性能力领先业界同类产品,RocketMQ 的 Dashboard 和消息轨迹等功能为业务核心链路保驾护航,有效应对线上大规模生产使用过程中遇到的容量规划、消息收发问题排查以及自定义监控等场景。

消息队列简介

进入主题之前,首先简要介绍下什么是阿里云的消息队列?

阿里云提供了丰富的消息产品家族,消息产品矩阵涵盖了互联网、大数据、物联网等各个业务场景的领域,为云上客户提供了多维度可选的消息解决方案。无论哪一款消息队列产品,核心都是帮助用户解决业务和系统的异步、解耦以及应对流量洪峰时的削峰填谷,同时具备分布式、高吞吐、低延迟、高可扩展等特性。

但是不同的消息产品在面向客户业务的应用中也有不同的侧重。简单来做,消息队列 RocketMQ 是业务领域的首选消息通道;Kafka 是大数据领域不可或缺的消息产品;MQTT 是物联网领域的消息解决方案;RabbitMQ 侧重于传统业务消息领域;云原生的产品集成和事件流通道是通过消息队列 MNS 来完成;最后事件总线 EventBridge 是一个阿里云上的一个事件枢纽,统一构建事件中心。

本篇主要讲的是业务领域的消息首选通道:消息队列 RocketMQ。RocketMQ 诞生于阿里的电商系统,具有高性能、低延迟、削峰填谷等能力,并且提供了丰富的在业务和消息场景上应对瞬时流量洪峰的功能,被集成在用户的核心业务链路上。

作为一个核心业务链路上的消息,就要求 RocketMQ 具备非常高的可观测性能力,用户能通过可观测性能力及时的监控定位异常波动,同时对具体的业务数据问题进行排查。由此,可观测性能力逐步成为消息队列 RocketMQ 的核心能力之一。

那么什么是可观测能力呢?下面简单对可观测能力进行介绍。

可观测能力

提到可观测能力,大家可能最先想到的是可观测的三要素:Metrics(指标)、Tracing(追踪)和 Logging(日志)。

结合消息队列的理解,可观测能力三要素的细化解释如下:

Metrics:Dashborad 大盘

1)指标涵盖丰富:包含消息量、堆积量、各个阶段耗时等指标,每个指标从实例、Topic、消费 GroupID 多维度做聚合和展示;

2)消息团队最佳实践模板:为用户提供最佳模板,特别是在复杂的消费消息场景,提供了丰富的指标帮助快速定位问题,并持续迭代更新;

3)Prometheus + Grafana:Prometheus标准数据格式、利用Grafana展示,除了模板,用户也可以自定义展示大盘。

Tracing:消息轨迹

1)OpenTelemetry tracing标准:RocketMQ tracing 标准已经合并到 OpenTelemetry 开源标准,规范和丰富 messaging tracing 场景定义;

2)消息领域定制化展示:按照消息维度重新组织抽象的请求 span 数据,展示一对多的消费,多次消费信息,直观、方便理解;

3)可衔接 tracing链路上下游:消息的 tracing 可继承调用上下文,补充到完整调用链路中,消息链路信息串联了异步链路的上游和下游链路信息。

Logging:客户端日志标准化

1)Error Code标准化:不同的错误有唯一的 error code;

2)Error Message 完整:包含完整的错误信息和排序所需要的资源信息;

3)Error Level 标准化:细化了各种不同错误信息的日志级别,让用户根据 Error、Warn 等级别配置更合适和监控告警。

了解消息队列和可观测能力的基础概念,让我们来看看当消息队列 RocketMQ 遇到可观测,会产生什么样的火花?

RocketMQ 的可观测性工具的概念介绍

从上文的介绍中可以看到 RocketMQ 的可观测能力能够帮助用户根据错误信息排查消息在生产和消费过程中哪些环节出了问题,为了帮助大家更好的理解功能的应用,先简要介绍下消息生产消费流程过程中的一些概念。

消息生产和消费流程概念

首先我们先明确以下几个概念:

  • Topic:消息主题,一级消息类型,通过Topic对消息进行分类;
  • 消息(Message):消息队列中信息传递的载体;
  • Broker:消息中转角色,负责存储消息,转发消息;
  • Producer:消息生产者,也称为消息发布者,负责生产并发送消息;
  • Consumer:消息消费者,也称为消息订阅者,负责接收并消费消息。

消息生产和消费的流程简单来说就是生产者将消息发送到 topic 的 MessageQueue 上进行存储,然后消费者去消费这些 MessageQueue 上的消息,如果有多个消费者,那么一个完整的一次消息生产发生的生命周期是什么样子的?

这里我们以定时消息为例,生产者 Producer 发送消息经过一定的耗时到达 MQ Server,MQ 将消息存储在 MessageQueue,这时队列中有一个存储时间,如果是定时消息,还需要经过一定的定时时间之后才能被消费者消费,这个时间就是消息就绪的时间;经过定时的时间后消费者 Consumer 开始消费,消费者从 MessageQueue 中拉取消息,然后经过网络的耗时之后到达消费者客户端,这时候不是低码进行消费的,会有一个等待消费者资源线程的过程,等到消费者的线程资源后才开始进行真正的业务消息处理。

从上面的介绍中可以看出,业务消息有一定的耗时处理,完成之后才会向服务端返回ack的结果,在整个生产和消费的过程中,最复杂的便是消费的过程,因为耗时等原因,会经常有消息堆积的场景,下面来重点看一下在消息堆积场景下各个指标表示的含义。

消息堆积场景

如上图,消息队列中,灰色部分的消息表示是已完成的消息量,就是消费者已处理完成并返回 ack 的消息;橙色部分的消息表示这些消息已经被拉取到消费者客户端,正在被处理中,但是还没有返回处理结果的消息,这个消息其实有一个非常重要的指标,就是消息处理耗时;最后绿色的消息表示这些消息在已经发生的 MQ 队列中已存储完成,并且已经是可被消费者消费的一个状态,称为已就绪的消息。

已就绪消息量(Ready messages):

含义:已就绪消息的消息的条数。

作用:消息量的大小反映还未被消费的消息规模,在消费者异常情况下,就绪消息量会变多。

消息排队时间(Queue time)

含义:最早一条就绪消息的就绪时间和当前时间差。

作用:这个时间大小反映了还未被处理消息的时间延迟情况,对于时间敏感的业务来说是非常重要的度量指标。

RocketMQ 的可观测性工具的功能介绍

结合上文介绍的消息队列 RocketMQ 可观测概念,下面具体对 RocketMQ 的可观测性工具的两个核心功能进行介绍。

可观测功能介绍 - Dashboard

Dashboard 大盘可以根据各种参数查看指定的指标数据,主要的指标数据包含下面三点:

1)Overview(概览):

  • 查看实例据总的消息收发量、TPS、消息类型分布情况。
  • 查看是的各个指标当前的分布和排序情况:发送消息量最多的 Topic、消费消息量最多的 GroupID、堆积消息量最多的 GroupID、排队时间最长的 GroupID 等。

2)Topic(消息发送):

  • 查看指定 Topic 的发送消息量曲线图。
  • 查看指定 Topic 的发送成功率曲线图。
  • 查看指定 Topic 的发送耗时曲线图。

3)GroupID(消息消费):

  • 查看指定 Group 订阅指定 Topic 的消息量曲线图。
  • 查看指定 Group 订阅指定 Topic 的消费成功率。
  • 查看指定 Group 订阅指定 Topic 的消费耗时等指标。
  • 查看指定 Group 订阅指定 Topic 的消息堆积相关指标。

可观测功能介绍 - 消息轨迹

在 Tracing 方面提供了消息轨迹功能,主要包含以下三方面能力:

1)便捷的查询能力:可根据消息基本信息查询相关的轨迹;二期还可以根据结果状态、耗时时长来过滤查询,过滤出有效轨迹快速定位问题。

2)详细的 tracing 信息:除了各个生命周期的时间和耗时数据,还包含了生产者、消费者的账号和机器信息。

3)优化展示效果:不同的消息类型轨迹;多个消费 GroupID 的场景;同个消费 GroupID 多次重投的场景等。

最佳实践

场景一:问题排查

1)目标:消息生产消费健康情况

2)原则

  • 一级指标:用来报警的指标,公认的没有异议的指标。
  • 二级指标:一级指标发生变化的时候,通过查看二级指标,能够快速定位问题的原因所在。
  • 三级指标:定位二级指标波动原因。根据各自业务的特点和经验添加。

基于目标和原则,生产者用户和消费者用户问题排查和分析方式如下:

场景二:容量规划

容量规划场景下只要解决下面三个问题:

1)问题一:怎样评估实例容量?

解决方法:

  • 实例详情页》查看指定实例数据统计,可以看到所选时间段内的最大消息收发的 TPS 峰值。
  • 铂金版实例可以根据这个数据来添加报警监控和判断业务。

2)问题二:怎样查看标准版实例的消耗

解决方法:

  • 可以查看概览总消息量模块

3)问题三:有哪些已下线,需要清理资源?

解决方法:

  • 指定一段时间内(例如近一周),按 Topic 的消息发送量由小到大排序,查看是否有消息发送量为 0 的 Topic,这些 Topic 相关的业务或许已下线。
  • 指定一段时间内(例如近一周),按 GroupID 的消息消费量由小到大排序,查看是否有消息消费量为 0 的 GroupID,这些 GroupID 相关的业务或许已下线。

场景三:业务规划

业务规划场景下主要解决以下三个问题:

1)问题一:如何查看业务峰值分布情况?

解决方法:

  • 查看 Topic 消息接收量的每天的高峰时间段。
  • 查看 Topic 消息接收量周末和非周某的消息量差别。
  • 查看 Topic 消息接收量节假日的变化情况。

2)问题二:如何判断目前哪些业务有上升趋势?

解决方法:

  • 查看消息量辅助判断业务量变化趋势。

3)问题三 :怎样优化消费者系统性能?

解决方法:

  • 查看消息处理耗时,判断是否在合理范围内有提升的空间。

本篇文章通过消息队列、可观测能力、RocketMQ 可观测概念及功能和最佳实践的介绍,呈现了 RocketMQ 的可观测性工具在业务核心链路上的可视化能力,希望给大家在日常的线上的一些问题排查和运维过程中带来一些帮助。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

解析rocketmq业务消息——“事务消息”

引言:在分布式系统调用场景中存在这样一个通用问题,即在执行一个核心业务逻辑的同时,还需要调用多个下游做业务处理,而且要求多个下游业务和当前核心业务必须同时成功或者同时失败,进而避免部... 查看详情

ugeek大咖说|顺丰科技:全链路压测中的可观测性实践

...网大厂的核心骨干主讲,分享原厂实践。本年度主题为可观测,我们希望通过一场场有趣、有料、有深度的活动,让运维圈的小伙伴聚集在一起,深度交流与学习。一月一期,不见不散!9月27日,UGeek大咖说第九期圆满结束,此... 查看详情

istio可观测性(链路)

可观测性的英文是Observability,这是伴随着云原生技术发展产生的一个新兴词汇,在传统的IT中,并没有这种说法。简单来说,可观测性是通过系统输出信息到外部,以检测系统内部的运行状态。Trace,通过内部打点的方式串联起... 查看详情

玩转分布式架构下的可观测性

可观测性背景云原生可观测性是从传统软件监控及数据分析可视化工具中,总结出在云原生领域中,从底层容器基础设施、通用技术组件到业务应用系统全链路监控运维、运营治理等产品化体系化的能力诉求。可观测性... 查看详情

golang快速接入rocketmq实现消息队列业务(代码片段)

...使用redis中的list数据类型,在大规模业务中我们可以引入rocketmq等,尤其在业务重构时需要将原有的redis消息队列实现改成rocketmq,为了保证既有业务不受影响,不引入新的BUG,是一件非常苦恼的事情;今天就介绍一个包,可以方... 查看详情

简单理解rocketmq---入门

简介:    RocketMQ是阿里巴巴出品的一款低延迟,可靠,可扩展,易于使用的面向消息的中间件,支撑着阿里巴巴集团庞大的消息业务增长。RocketMQ是基于MetaQ的一个开源分支,几乎重写了MetaQ所有的核心组件,可以... 查看详情

消息队列rocketmq介绍

RocketMQ介绍基于发布订阅的队列模型消息中间件,服务端使用JAVA编写,客户端支持JAVA、C++。阿里2012年开源,之后作为Apache基金会的一个项目进行维护。是一款低延迟、高可靠、可伸缩、易于使用的中间件。在Github上有相关介绍... 查看详情

你可能需要的kafka面试题与答案整理

...一致性如何做的消息队列选型,为什么选择kafka?kafka和rocketmq吞吐量可达百万级,比activemq、rabbitmq要高一个数量级kafka和rocketmq都是分布式架构,高可用kafka和rocketmq都是毫秒级低延时,rocketmq甚至到微秒级rocketmq不支持队列层面... 查看详情

企业应用可观测性利器!华为云codeartsapm发布

...全面拥抱开源生态。本文分享自华为云社区《企业应用可观测性利器!华为云CodeArtsAPM发布》,作者:华为云头条。当前,企业数字化转型和业务互联网化逐渐加深,企业对应用的高可用、可靠性提出了更高的要求。随着企业快... 查看详情

rocketmq

RocketMQ:  支持集群,效率高,同时支持上万队列,支持消息持久化,重试机制等等;RocketMQ包含的组件  NameServer:单点,供Producer和Consumer获取Broker地址  Producer:产生并发送消息  Consumer:接受并消费消息  Broker:消息... 查看详情

消息队列总结

...一致性架构。主流的的消息队列有RabbitMQ,Kafka,RocketMQ等消息(Message):传输的数据。队列(Queue):队列是一种先进先出的数据结构。生产者:把数据放到消息队列消费者:从消息队列里边取数据为什么使用... 查看详情

分布式消息队列

...部通信的核心手段,使用较多的消息队列有RabbitMQ、RocketMQ、Active 查看详情

科技云报道:2023年,可观测性迎来哪些新趋势?

科技云报道原创。可观测性不是一个新鲜的名词,但是近年来随着云原生技术的发展,在带来效率、可用性提升的同时也增加了复杂度,而可观测性成为降低这种复杂度的唯一手段,因此被推到了前所未有的重要... 查看详情

可观测性—overview

目录文章目录目录云原生可观测性的背景云原生可观测性与传统监控的区别可观测性的维度基础设施层业务层可观测性系统的技术栈可观测性的数据结构类型可观测性的系统组件CNCFOpenTelemetry可观测性系统的应用场景云原生可观... 查看详情

消息中间件搬迁

...息队列作用:异步,解藕,峰值处理,可恢复,顺序,扩展性 RocketMq源码部分主要可以分为rocketmq-broker,rocketmq-client,rocketmq-common,rocketmq-filterSrv,rocketmq-namesrv和rocket 查看详情

云栖发布|阿里云消息队列rocketmq5.0:消息事件流融合处理平台

简介:RocketMQ5.0的发布标志着阿里云消息正式从消息领域正式迈向了“消息、事件、流”场景大融合的新局面。引言:从“消息”到“消息、事件、流”的大融合消息队列作为当代应用的通信基础设施,微服务架构应... 查看详情

中国工商银行基于ebpf技术的云原生可观测图谱探索与实践

...景。在这个背景下,中国工商银行积极开展云原生可观测图谱的探索和实践,针对可观测体系中的痛难点,通过深入研究内核新技术,进一步完善云原生技术版图。业界云原生可观测体系痛点中国工商银行早期基... 查看详情

双11背后的全链路可观测性:阿里巴巴鹰眼在“云原生时代”的全面升级

...巴基础架构的多次升级,每一次的架构升级都会对系统可观测性能力(Observability)带来巨大挑战,而这次的“云原生”升级,给我们带来的新挑战又是什么呢?云原生与可观测性在刚刚过去的2019年双11,我们再次见证了一个技术奇... 查看详情