喜马拉雅 Apache RocketMQ 消息治理实践

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
容器镜像服务 ACR,镜像仓库100个 不限时长
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 本文通过喜马拉雅的RocketMQ治理实践分享,让大家了解使用消息中间件过程中可能遇到的问题,避免实战中踩坑。

作者:曹融,来自喜马拉雅,从事微服务和消息相关中间件开发。

1.png

本文通过喜马拉雅的RocketMQ治理实践分享,让大家了解使用消息中间件过程中可能遇到的问题,避免实战中踩坑。


业务背景现状以及遇到的问题


1、消息队列概况


(1)在线场景:RabbitMQ,实例数9个;


(2)离线场景:Kafka,8个集群;


2、遇到的问题


在线场景缺乏治理:


• 业务混用,相互干扰,非核心对接积压过多触发集群限流;


• 节点负载不均衡,资源浪费严重;


• 资源和应用无关联,消息积压;


• 业务混用,相互干扰,非核心对接积压过多触发集群限流;


在线MQ集群改造方案


1、选型


(1)业务便捷性:易于开发、使用、维护,提高效率,如自带重试、自带死信、自带事务保障;


(2)性能:包容业务的不确定性,如抗短时突发流量、抗积压等;


(3)简单:架构适用于拆分小集群;Java语言易于排查问题和二次开发;社区活跃,使用的人多,方便排查问题;


2、治理方案


(1)集群划分方针:划分小集群,减少相互干扰,减少影响面;


(2)拆分方案:


2.png


如上图所示,对于公司和“钱”相关的业务及核心业务,不仅要给足资源,同时要保证较高的数据安全,在这里就使用了SYNC_MASTER;


  • 对于非核心业务,我们希望它的性价比高,使用尽量少的资源去支撑足够多的数据量,此处就使用了ASYNC_MASTER,伸缩性会更好;


  • 对于其它数据安全要求不高的业务,包括消息轨迹,我们使用单MASTER集群,保证了性能需要,资源使用也少;


  • 对于延时集群,专注于积压消息,pagecache利用率低,目前还没用做,未来考虑在云上采用按需购买的方式来使用;另外对于临时集群目前也没有涉及。


3、控制面管理


(1)统一消息治理后台;


3.png


对所有消息中间件的后台做了一个统一的管理后台,如上图。


(2)对RabbitMQ,仅维护,自动维护关联关系;


(3)对于RocketMQ,用于提升用户体验,比如发送/查询消息、一键接入demo、死信重发等;


4.png

消息管理界面


5.png

配置demo


6.png

死信重发


(4)PaaS化审批


我们对消息化的资源管理做了一个PaaS化的管理,对功能做了一些限制,开发和运维只能在测试环境下做申请和审批,审批通过后再同步到其它环境,然后创建资源、通知用户。


7.png

image.gif

4、统一接入SDK


(1)用户只关心用什么资源,不需要了解namesrv地址,减少出错概率;


8.png


(2)动态配置热生效,节约用户时间;


9.png


(3)收/发消息,失败重试,为中间件做兜底;


10.png


(4)熔断限流,为业务做兜底;


11.png


(5)灰度收消息(消息开关),满足业务特殊场景;


(6)集成公司其他功能,如调用链、全链路压测等;


5、多维度监控


  • 运维:整体情况,cluster 内 top 情况,所属物理机情况;


  • 资源:Topic 上下游 qps,lag 等;


  • 用户:实例消息收发均匀,延迟。


老集群迁移方案


1、人工迁移


场景:消息上下游均为自己的服务;


迁移流程:双收(RocketMQ&RabbitMQ)-> 双发-> 单发(RocketMQ)-> 单收;


需要注意的问题:业务重构,topic合并可能导致下游多tag消息倾斜,导致lag异常问题;


2、自动迁移


  • RabbitMQ <--> RocketMQ 相互镜像迁移;


  • 粒度: exchange < -- > topic;


  • 注意: 相同组的任务互斥;


(1)RabbitMQ -> RocketMQ的迁移方案:


  • 把RabbitMQ的exchange整体同步到topic,在abc.exchange加一个topic前缀为topic_abc.excange;


  • 把RabbitMQ的Routing key预设为RocketMQ的tag;


  • 通过migrator任务程序收集RabbitMQ的消息队列,按照不同的类型传递到RocketMQ;


12.png


(2)RocketMQ -> RabbitMQ的迁移方案:


方法类似,见下图:


13.png


(3)自动迁移的几种情况:


  • 消费者迁移,生产者不动:
    配置RabbitMQ -> RocketMQ 任务;


  • 生产者迁移,消费者不动:
    配置RocketMQ -> RabbitMQ 任务;


  • 生产者先不迁移,然后迁移了:
    先配置RabbitMQ -> RocketMQ 任务;
    迁移完毕后,关闭RabbitMQ -> RocketMQ 任务;

    配置RocketMQ -> RabbitMQ 任务。


以上就是本次分享的全部内容,点击此处即可查看活动视频回放,期待下次交流。



相关实践学习
消息队列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
相关文章
|
1月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
33 1
|
9天前
|
消息中间件 Java Apache
RocketMQ消息回溯实践与解析
在分布式系统和高并发应用的开发中,消息队列扮演着至关重要的角色,而RocketMQ作为阿里巴巴开源的一款高性能消息中间件,以其高吞吐量、高可用性和灵活的配置能力,在业界得到了广泛应用。本文将围绕RocketMQ的消息回溯功能进行实践与解析,分享工作学习中的技术干货。
39 3
|
30天前
|
消息中间件 弹性计算 Kubernetes
RabbitMQ与容器化技术的集成实践
【8月更文第28天】RabbitMQ 是一个开源消息代理和队列服务器,用于在分布式系统中存储、转发消息。随着微服务架构的普及,容器化技术(如 Docker 和 Kubernetes)成为了部署和管理应用程序的标准方式。本文将探讨如何使用 Docker 和 Kubernetes 在生产环境中部署和管理 RabbitMQ 服务,同时保证高可用性和弹性伸缩能力。
38 3
|
30天前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
105 2
|
1月前
|
消息中间件 分布式计算 Hadoop
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
36 3
|
1月前
|
消息中间件 运维 Kafka
Apache Flink 实践问题之达到网卡的最大速度如何解决
Apache Flink 实践问题之达到网卡的最大速度如何解决
35 2
|
2月前
|
消息中间件 人工智能 Apache
Apache RocketMQ 中文社区全新升级!
RocketMQ 中文社区升级发布只是起点,我们将持续优化体验细节,推出更多功能和服务,更重要的是提供更多全面、深度、高质量的内容。
508 10
|
4天前
|
消息中间件 运维 监控
云消息队列RabbitMQ实践解决方案评测报告
本报告旨在对《云消息队列RabbitMQ实践》解决方案进行综合评测。通过对该方案的原理理解、部署体验、设计验证以及实际应用价值等方面进行全面分析,为用户提供详尽的反馈与建议。
34 15
|
3天前
|
消息中间件 弹性计算 运维
阿里云云消息队列RabbitMQ实践解决方案评测报告
阿里云云消息队列RabbitMQ实践解决方案评测报告
24 9
|
1月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
当今社会,物联网技术的发展带来了许多繁琐的挑战,尤其是在数据库管理系统领域,比如实时整合海量数据、处理流中的事件以及处理数据的安全性。例如,应用于智能城市的基于物联网的交通传感器可以实时生成大量的交通数据。据估计,未来5年,物联网设备的数量将达数万亿。物联网产生大量的数据,包括流数据、时间序列数据、RFID数据、传感数据等。要有效地管理这些数据,就需要使用数据库。数据库在充分处理物联网数据方面扮演着非常重要的角色。因此,适当的数据库与适当的平台同等重要。由于物联网在世界上不同的环境中运行,选择合适的数据库变得非常重要。 原创文字,IoTDB 社区可进行使用与传播 一、什么是IoTDB 我
106 9
Apache IoTDB进行IoT相关开发实践

相关产品

  • 云消息队列 MQ
  • 推荐镜像

    更多