消息队列RocketMQ版:消费异常运维排查体验

更新时间:
复制为 MD 格式

本实验场景介绍消息队列RocketMQ版的可观测工具功能,通过示例程序模拟生产环境消费业务故障,并通过产品提供的开箱即用的可观测工具定位消费异常。

场景简介

RocketMQ广泛应用于在线交易等核心链路,在核心链路出现调用异常、收发消息问题时,消息可观测能力至关重要。消息队列RocketMQ版提供了一套完整的可观测工具体系帮助客户快速定位生产环境问题。详情请参考通过可观测性能力进行故障处理最佳实践

本实验场景介绍消息队列RocketMQ版的可观测工具功能,通过示例程序模拟生产环境消费业务故障,并通过产品提供的开箱即用的可观测工具定位消费异常。

费用说明

本实验预计一个小时产生费用3元。如果您调整了资源规格、使用时长,或执行了本方案以外的操作,可能导致费用发生变化,请以控制台显示的实际价格和最终账单为准。

背景知识

本场景主要涉及以下云产品和服务:

  • 消息队列RocketMQ

    云消息队列RocketMQ版是阿里云基于Apache RocketMQ构建的低延迟、高并发、高可用、高可靠的分布式“消息、事件、流”统一处理平台。RocketMQ自诞生以来一直服务阿里集团十余年,历经多次双十一万亿级数据洪峰稳定性验证。

  • 云服务器ECS

    云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。一台云服务器ECS实例等同于一台虚拟服务器,内含CPU、内存、操作系统、网络配置、磁盘等基础的组件。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。阿里云ECS持续提供创新型服务器,解决多种业务需求,助力您的业务发展。

创建实验资源

  1. 在实验页面,勾我已阅读并同意《阿里云云起实践平台服务协议》我已授权阿里云云起实践平台创建、读取及释放实操相关资源后,单击开始实操

  2. 创建资源需要5分钟左右的时间,请您耐心等待。

  3. 云产品资源列表,您可以查看本场景涉及的云产品资源信息。

    image

安全设置

资源创建完成后,为了保护您阿里云主账号上资源的安全,请您重置云服务器ECS的登录密码和设置安全组端口。

  1. 重置云服务器ECS的登录密码。

    1. 云产品资源列表的ECS云服务器区域,单击管理

      image

    2. 实例详情页签的基本信息区域,单击重置密码

      image

    3. 重置实例密码对话框中,设置新密码确认密码重置密码的方式选择在线重置密码配置SSH密码登录策略选择开启,单击确认修改

      image

      返回如下结果,表示ECS实例root用户的登录密码重置成功。

      image

创建RocketMQ Topic、Group资源

本步骤将指导您在RocketMQ实例上创建用于收发消息的TopicGroup资源。

  1. 云产品资源列表的消息队列RocketMQ区域,单击管理

    image

  2. 在左侧导航栏中,单击Topic管理

    image

  3. Topic管理页面,单击创建Topic

    image

  4. 创建Topic面板,根据如下说明配置参数,然后单击确定

    参数说明:

    • 主题名称:输入Topic名称,例如demo_topic。

    • 消息类型:本实验是基本消息收发体验,请选择普通消息。

    • 描述:输文字描述,用于标识这个topic的作用,例如test。

  5. 在左侧导航栏中,单击Group管理

    image

  6. Group管理页面,单击创建Group

    image

  7. 创建Group面板,根据如下说明配置参数,然后单击确定

    参数说明:

    • GroupID:输入Group名称,例如demo_group。

    • 投递顺序性:本实验是基本消息收发体验,请选择并发投递。

    • 描述:输文字描述,用于标识这个group的作用,例如test。

登录云服务器ECS,运行故障模拟程序

本步骤将指导您如何体验定时消息收发程序。

  1. 云产品资源列表的ECS云服务器区域,单击远程连接

    image

  2. 登录实例对话框中,输入用户自定义密码,单击确定

    image

  3. 执行如下命令,安装JDK。

    yum -y install java-1.8.0-openjdk-devel.x86_64
  4. 执行如下命令,查看是否安装成功。

    java -version

    返回如下结果,则表示JDK安装成功。

  5. 执行如下命令,运行消息收发故障模拟程序,为降低体验复杂度,该程序中同时集成了生产和消费的业务逻辑。

    说明

    在本实验中,已在云服务器ECS中为您准备好Demo代码。

    java -cp demo.jar -Dendpoints=xxx:8080  -Dtopic=xxx -Dgroup=xxx   workshop.ConsumeLagDemo

    其中,命令中的部分参数需要根据测试的实例资源的实际信息输入。

    参数

    说明

    -Dendpoints

    实例接入点信息。在RocketMQ控制台 > 实例详情 > TPC协议接入点 > VPC专有网络的接入点信息中查看。

    VPC专有网络的接入点信息格式一般为rmq-cn-{xxx}-vpc.cn-{xxx}.rmq.aliyuncs.com:8080。

    在本实验中,为了方便用户的操作,您可在云产品资源列表中消息队列RocketMQ区域获取接入点信息。

    image

    -Dtopic

    实际发送的主题名称,输入创建的Topic名称。

    -Dgroup

    实际订阅消费使用的消费者分组,输入创建的Group名称。

    -Dnum

    输入希望发送的消息条数,例如10,代表10条消息。

    预期的输出结果如下。

    image

使用消息轨迹等工具分析故障

上一小节模拟的是生产环境经常出现的一种故障场景,即消费方下游业务因数据库慢SQL等原因造成消费阻塞且出现了消费失败的场景。

在该场景下,虽然RocketMQ会对失败消息重新投递消费,但消费速度已经变慢产生堆积,业务需要及时排查消费慢和消费失败的原因。

在该场景下,业务方唯一知道的是业务订单没有正确处理,手上只有订单ID信息。因此借助RocketMQ消息轨迹功能可以快速定位当前消息的链路情况,并判断问题出在哪台机器。

  1. 切换到RocketMQ控制台页签。

  2. 在左侧导航栏中,单击消息轨迹

    image

  3. 消息轨迹页面,根据如下说明配置信息,然后单击查询

    参数说明:

    • 查询方式:选择按Message ID查询。

    • Topic:输入Topic名称,例如demo_topic。

    • Message Key:在本实验中已经将订单ID设置为Message Key,因此在Message Key中可以输入订单ID查询轨迹,本实验中订单IDOrderId_0。

    • 时间范围:选择最近10分钟。

      image

      在服务器ECS终端中您可查看到订单ID信息。

      image

  4. 消息轨迹页面下方的查询结果中,单击其右侧操作列下的消息轨迹

    image

  5. 轨迹详情面板,单击消费者区域中的Group名称,例如本实验中单击demo_group

    image

    返回如下页面,您可查询消息的收发详情过程。

    image

  6. 基于上述操作步骤,可以看出,RocketMQ消息轨迹功能可以帮助业务快速定位到某条链路的完整过程,从生产到消费的过程中的机器、时间、处理过程、处理结果都和模拟的情况一致。在生产环境中可以进一步登录机器排查消费失败和慢的原因。

清理资源

  • 在完成实验后,如果无需继续使用资源,选择不保留资源,单击结束实操。在结束实操对话框中,单击确定

    image

  • 在完成实验后,如果需要继续使用资源,选择付费保留资源,单击结束实操。在结束实操对话框中,单击确定。请随时关注账户扣费情况,避免发生欠费。

    image