当前位置: 首页 > 后端技术 > Java

消息队列RocketMQ遇上可观察性:业务核心链路可视化

时间:2023-04-01 16:14:45 Java

简介:本文主要介绍RocketMQ的可观察性工具在线上生产环境中的最佳实践。RocketMQ的可观察性能力领先于业界同类产品。RocketMQ的Dashboard和消息溯源等功能为业务核心环节保驾护航,有效应对线上规模化生产和使用过程中遇到的容量规划、消息收发问题排查、定制等。监控等场景。作者:文婷、周卜简介:本文主要介绍RocketMQ的可观察性工具在线上生产环境中的最佳实践。RocketMQ的可观察性能力领先于业界同类产品。RocketMQ的Dashboard和消息溯源等功能为业务核心环节保驾护航,有效应对线上规模化生产和使用过程中遇到的容量规划、消息收发问题排查、定制等。监控等场景。消息队列简介在进入正题之前,先简单介绍一下什么是阿里云的消息队列?阿里云提供丰富的消息产品系列。消息产品矩阵覆盖互联网、大数据、物联网等多种业务场景,在云端为客户提供多维度的可选消息解决方案。无论是哪种消息队列产品,其核心都是帮助用户解决业务与系统的异步、解耦,以及应对流量高峰时的削峰填谷。它还具有分布式、高吞吐量、低延迟和高扩展性的特点。但是,不同的消息产品在面向客户的业务应用中也有不同的侧重点。简单来说,消息队列RocketMQ是业务领域首选的消息通道;Kafka是大数据领域不可或缺的消息产品;MQTT是物联网领域的消息解决方案;RabbitMQ专注于传统业务消息领域;云原生产品集成和事件流通道通过消息队列MNS完成;最后,事件总线EventBridge是阿里云上的一个事件枢纽,统一搭建一个事件中心。本文主要讲业务领域的消息首选通道:消息队列RocketMQ。RocketMQ诞生于阿里的电商系统。具有高性能、低时延、削峰填谷能力,提供丰富的功能应对业务和消息场景中的瞬时流量高峰。它是集成在用户核心业务环节的优势。RocketMQ作为核心业务环节上的消息,需要具备非常高的可观察性能力。用户可以通过可观测能力及时监控和定位异常波动,同时排查具体业务数据问题。于是,可观察性能力逐渐成为消息队列RocketMQ的核心能力之一。那么什么是可观察性?下面简单介绍一下可观测性。可观察性说到可观察性,大家可能首先想到的是三个可观察元素:Metrics、Tracing、Logging。结合对消息队列的理解,对可观察性三要素的详细解释如下:Metrics:Dashboard1)指标覆盖面广:包括消息量、累积量、各阶段耗时等指标。各指标从instance、topic、consumptionGroupID进行多维度聚合展示;2)消息团队最佳实践模板:为用户提供最佳模板,尤其是复杂的消息消费场景,提供丰富的指标帮助快速定位问题,并持续迭代更新;3)Prometheus+Grafana:Prometheus标准数据格式,使用Grafana展示,除了模板,用户还可以自定义市场的展示。Tracing:消息追踪1)OpenTelemetry追踪标准:RocketMQ追踪标准已经合并到OpenTelemetry开源标准中,规范和丰富了消息追踪场景的定义;2)消息字段自定义展示:将抽象的请求跨度数据按照消息维度重新组织,展示一对Multi-consumption,多次消费信息,直观易懂;3)可对接追踪链路上下游:消息的追踪可继承调用上下文,补充成完整的调用链路,消息链路信息与异步链路串联上下游链路信息。日志记录:客户端日志标准化1)错误码标准化:不同的错误有唯一的错误码;2)CompleteErrorMessage:包含完整的错误信息和排序所需的资源信息;3)ErrorLevel的标准化:针对不同的错误信息细化了各个Log级别,让用户可以根据Error、Warn等级别更恰当的配置和监控告警。要了解消息队列和可观察性的基本概念,我们来看看当消息队列RocketMQ遇上可观察性,会擦出怎样的火花?RocketMQ的可观察性工具概念介绍从上面的介绍我们可以看出,RocketMQ的可观察性可以帮助用户根据错误信息排查消息生产和消费过程中的哪些环节。为了帮助大家更好的理解函数的应用,先简单介绍一下消息生产和消费过程中的一些概念。消息生产和消费过程的概念首先,我们要明确以下几个概念:Topic:消息主题,一级消息类型,通过Topic对消息进行分类;Message:消息队列中信息传递的载体;Broker:消息中转的角色,负责存储消息和转发消息;Producer:消息生产者,又称消息发布者,负责消息的生产和发送;Consumer:消息消费者,也称为消息订阅者,负责接收和消费消息。消息生产和消费的过程简单来说就是生产者将消息发送到主题的MessageQueue中存储,然后消费者在MessageQueue上消费消息。如果有多个消费者,那么一个完整的消息生产就发生了,生命周期是什么样子的呢?这里我们以定时消息为例。生产者在一定时间后将消息发送给MQServer,MQ将消息存储在MessageQueue中。这时,队列中有一个存储时间。如果是定时消息,则需要一定的定时时间,这个时间就是消息就绪的时间;预定时间后,消费者Consumer开始消费,消费者从MessageQueue中拉取消息,经过耗时网络后到达消费者客户端,这时候就不是低码消费了,会有一个流程等待消费者资源线程,直到消费者线程资源可用,才会开始真正的业务消息处理。从上面的介绍可以看出,业务消息有一定的耗时处理,完成后会向服务器返回ack结果。在生产和消费的整个过程中,最复杂的过程就是消费的过程,因为它消耗时间等原因,经常会出现消息堆积的场景。下面重点了解一下消息堆积场景下各个指标的含义。消息堆积场景如上图所示。在消息队列中,消息的灰色部分表示已经完成的消息数量,即消费者已经处理完并返回ack的消息;消息中橙色部分表示这些消息已经拉取到消费者客户端,正在处理中,但是还没有返回处理结果的消息。这个消息其实有一个很重要的指标,就是消息处理的耗时;最后一个绿色的消息表示这些消息已经存储到MQ队列中,并且已经准备好被消费者消费的状态称为就绪消息。就绪消息:含义:就绪消息的数量。作用:消息量的大小反映了消息还未被消费的大小。在消费者异常的情况下,就绪消息的数量会增加。消息排队时间(Queuetime)含义:最早就绪消息的就绪时间与当前时间的差值。作用:这个时间反映了消息未被处理的时间延迟,对于时间敏感的业务来说是一个非常重要的指标。RocketMQ的可观察工具功能介绍结合上面介绍的消息队列RocketMQ可观察概念,下面具体介绍RocketMQ的可观察工具的两大核心功能。Observable功能介绍-DashboardDashboard可以根据各种参数查看指定的指标数据。主要指标数据包括以下三点:1)Overview(概览):查看实例数据的总消息收发量、TPS、消息类型分布。查看当前各个指标的分布排序:发送消息最多的Topic,消费消息最多的GroupID,累积消息最多的GroupID,排队时间最长的GroupID等。2)Topic(消息sending):查看指定Topic发送的消息量图表。查看指定Topic的发送成功率曲线图。查看指定Topic的发送耗时图。3)GroupID(消息消费):查看指定Group订阅指定Topic的消息量图。查看指定Group订阅指定Topic的消费成功率。查看指定Group订阅指定Topic的耗时等指标。查看订阅指定Topic的指定Group的消息累积相关指标。Observable功能介绍-MessageTracing在Tracing中提供了消息追踪功能,主要包括以下三个方面:1)便捷的查询能力:可以根据消息的基本信息查询相关的trace;第二阶段还可以根据查询结果的状态、耗时长短来过滤查询,过滤出有效轨迹,快速定位问题。2)详细追溯信息:除了每个生命周期的时间和耗时数据外,还包括生产者和消费者的账号和机器信息。3)优化展示效果:不同消息类型轨迹;多种消费GroupID场景;同一个消费GroupID多次重提交场景等。最佳实践场景1:故障排查1)目标:新闻生产消费健康状况2)原则一级指标:用于报警的指标,公认的无争议的指标。二级指标:当一级指标发生变化时,通过查看二级指标可以快速定位问题原因。三级指标:定位二级指标波动的原因。根据各自业务的特点和经验进行添加。根据目标和原则,针对生产者用户和消费者用户的排查和分析方法如下:场景二:容量规划在容量规划场景中,只需要解决以下三个问题:1)问题一:如何解决评估实例容量?解决方法:在实例详情页面查看指定实例数据统计,可以看到所选时间段内最大收发消息的TPS峰值。白金版实例可以根据这些数据添加告警监控和判断服务。2)问题2:如何查看标准版实例的消费情况解决方法:可以查看总消息量模块概览3)问题3:哪些已经下线,需要清理资源?解决方法:在指定时间段内(比如一周内),将topic按发送量从小到大排序,查看是否有发送量为0的topic。与这些主题相关的业务可能已经下线。在指定的时间段内(比如过去一周),按照GroupID的消息消费量从小到大排序,查看是否有消息消费量为0的GroupID,这些GroupID相关的业务可能有一直离线。场景三:业务规划在业务规划场景中,主要解决以下三个问题:1)问题一:如何查看业务高峰的分布情况?解决方法:查看Topic消息接收的每日高峰时间。查看Topic收到的周末消息和非周末消息的消息量差异。查看节假日期间Topic消息接收量的变化。2)问题2:如何判断当前哪些业务处于上升期?解决方法:查看消息量,辅助判断业务量的变化趋势。3)问题三:如何优化消费者系统性能?解决方法:查看消息处理时间,判断是否有合理范围内的提升空间。本文通过消息队列、可观察性、RocketMQ可观察性概念和功能、最佳实践的介绍,展示了RocketMQ可观察性工具在业务核心环节的可视化能力。一些故障排除和运维过程中带来了一些帮助。原文链接本文为阿里云原创内容,未经许可不得转载。

猜你喜欢