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

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

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

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

1、消息队列概况

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

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

2、遇到的问题

在线场景缺乏治理:

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

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

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

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

在线MQ集群改造方案

1、选型

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

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

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

2、治理方案

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

(2)拆分方案:

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

  • 对于非核心业务,我们希望它的性价比高,使用尽量少的资源去支撑足够多的数据量,此处就使用了ASYNC_MASTER,伸缩性会更好;
  • 对于其它数据安全要求不高的业务,包括消息轨迹,我们使用单MASTER集群,保证了性能需要,资源使用也少;
  • 对于延时集群,专注于积压消息,pagecache利用率低,目前还没用做,未来考虑在云上采用按需购买的方式来使用;另外对于临时集群目前也没有涉及。

3、控制面管理

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

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

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

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

消息管理界面

配置demo

死信重发

(4)PaaS化审批

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

4、统一接入SDK

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

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

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

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

(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;

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

方法类似,见下图:

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

  • 消费者迁移,生产者不动:

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

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

    先配置RabbitMQ -> RocketMQ 任务;

    迁移完毕后,关闭RabbitMQ -> RocketMQ 任务;

配置RocketMQ -> RabbitMQ 任务。

原文链接

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

喜马拉雅 Apache RocketMQ 消息治理实践的更多相关文章

  1. Apache RocketMQ 消息队列部署与可视化界面安装

    一.介绍 Apache RocketMQ是一个分布式.队列模型的消息中间件,具有低延迟.高性能和高可靠.万亿级容量和灵活的可扩展性.核心组件由四部分组成:Name Servers,Brokers,Pr ...

  2. Apache RocketMQ 5.0 笔记

    RocketMQ 5.0:云原生"消息.事件.流"实时数据处理平台,覆盖云边端一体化数据处理场景. 核心特性 云原生:生与云,长与云,无限弹性扩缩,K8s友好 高吞吐:万亿级吞吐保 ...

  3. Apache RocketMQ 正式开源分布式事务消息

    近日,Apache RocketMQ 社区正式发布4.3版本.此次发布不仅包括提升性能,减少内存使用等原有特性增强,还修复了部分社区提出的若干问题,更重要的是该版本开源了社区最为关心的分布式事务消息, ...

  4. RocketMQ 消息发送system busy、broker busy原因分析与解决方案

    目录 1.现象 2.原理解读 2.1 RocketMQ 网络处理机制概述 2.2 pair.getObject1().rejectRequest() 2.3 漫谈transientStorePoolE ...

  5. RocketMQ(消息重发、重复消费、事务、消息模式)

    分布式开放消息系统(RocketMQ)的原理与实践 RocketMQ基础:https://github.com/apache/rocketmq/tree/rocketmq-all-4.5.1/docs ...

  6. 【Apache RocketMQ】RocketMQ捐赠给Apache那些鲜为人知的故事-转自阿里中间件

    序言 今年的双十一对阿里巴巴中间件消息团队来说,注定是个不平凡的日子.在这一天,稳定性小组重点攻克的低延迟存储解决方案成功地经受住了大考.整个大促期间,99.996%的延迟落在了10ms以内,极个别由 ...

  7. RocketMq消息队列使用

    最近在看消息队列框架 ,alibaba的RocketMQ单机支持1万以上的持久化队列,支持诸多特性, 目前RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,bin ...

  8. RocketMQ源码 — 八、 RocketMQ消息重试

    RocketMQ的消息重试包含了producer发送消息的重试和consumer消息消费的重试. producer发送消息重试 producer在发送消息的时候如果发送失败了,RocketMQ会自动重 ...

  9. RocketMQ 消息队列单机部署及使用

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/51086876 相关文章: <RocketMQ 消息队列单机部署及使用> ...

  10. 美团张志桐:美团 HTTP 服务治理实践

    2019 年 7 月 6 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·上海站,美团基础架构部技术专家张志桐在活动上做了<美团 HTTP ...

随机推荐

  1. MapStructPlus 1.2.5 发布,新增 Solon 支持

    MapStructPlus 1.2.5 发布,更新内容如下: fix: 解决 MapConvertMapperAdapter 编译警告问题 feat: 增加 nullValueMappingStrat ...

  2. 全国标杆!3DCAT实时云渲染助力深圳移动5G+智慧校园建设

    2023年2月27日,中国移动在陕西西安召开全国教育行业全年工作部署暨电子学生证专项调度会,来自全国各地的移动分公司.专家.合作伙伴等参加了会议.瑞云科技旗下3DCAT实时渲染云作为中国移动的重要合作 ...

  3. 干货分享 | 3个Zbrush实用减面工具分享

    一.使用Sculptris Pro Sculptris Pro是zbrush中的一个功能按钮,点击此工具按钮,同时将笔刷转换至standard笔刷,即可减去需要平滑的面. 点击开启Sculptris ...

  4. 工作记录:TypeScript从入门到项目实战(基础篇)

    前言 TypeScript是什么? 引用官方原话 TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript.TypeScript可以在任何浏览器.任何计算机和任何操作系 ...

  5. JavaScript知识总结 数据类型篇

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. JavaScript有哪些数据类型,它们的区别? JavaScript共有八种数据类型,分别是 Undefined.Null.Boo ...

  6. RepPoints:微软巧用变形卷积生成点集进行目标检测,创意满满 | ICCV 2019

    RepPoints的设计思想十分巧妙,使用富含语义信息的点集来表示目标,并且巧用可变形卷积来进行实现,整体网络设计十分完备,值得学习   来源:晓飞的算法工程笔记 公众号 论文: RepPoints: ...

  7. 应对 DevOps 中的技术债务:创新与稳定性的微妙平衡

    技术性债务在DevOps到底意味着什么?从本质上讲,这是小的开发缺陷的积累,需要不断地返工.它可能由多种原因引起,例如快速交付新功能的压力,这可能会导致团队不得不牺牲代码的整洁和完善.但这些不完整的小 ...

  8. Nacos 服务发现,注册及管理

    Nacos Nacos(官网: https://nacos.io) 发现,注册及管理. Nacos 支持发现,配置及管理几乎所有类型的服务: Kubernetes Service gRPC | Dub ...

  9. DNS的各种记录类型的应用解析

    可能很多人平时工作中不会遇到DNS配置相关的问题, 但如果偶尔遇到不同类型DNS记录的配置, 在没有搞清楚它们都是干啥的情况下, 会眼花缭乱, 还记得很多年前实验室配置DNS不太对导致只能访问www. ...

  10. 1 CSS的引入方式

    1 CSS的引入方式 CSS样式有三种不同的使用方式,分别是行内样式,嵌入样式以及链接式.我们需要根据不同的场合不同的需求来使用不同的样式. 行内样式 行内样式,就是写在元素的style属性中的样式, ...