简介:本文通过喜马拉雅的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. rocketmq消息回溯实践

    回溯消息主要使用场景就是重复消费一次指定时间后产生的相关topic的消息,需要在生产.消费时设置指定的参数,开启消息轨迹相关的配置,才能够使用. broker.conf 添加配置项 # 开启消息轨迹 ...

  2. Apache RocketMQ在我司的最佳实践--智慧政务场景下的分布式消息与分布式事务

    <本文已参与 RocketMQ Summit 优秀案例征文活动,点此了解详情> 缘起 对于Apache RocketMQ的了解,追溯起来,可以说是从开源初始,就认识到了它.那时候的它,还是 ...

  3. rocketmq支持最大消息_分布式消息引擎Apache RocketMQ最佳实践

    1 Producer一个应用尽可能用一个Topic,消息子类型用tags来标识,tags可以由应用自由设置 只有发送消息设置了tags,消费方在订阅消息时,才可以利用tags在broker做消息过滤 ...

  4. RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践

    作者|梁勇 ​ 背景 ​ 哈啰已进化为包括两轮出行(哈啰单车.哈啰助力车.哈啰电动车.小哈换电).四轮出行(哈啰顺风车.全网叫车.哈啰打车)等的综合化移动出行平台,并向酒店.到店团购等众多本地生活化生 ...

  5. 从消息到数据湖:看 Apache RocketMQ、Hudi、Kyuubi 最新进展

    上海的开发者小伙伴们,12 月 18 号,Apache RocketMQ & Apache Hudi & Apache Kyuubi (Incubating)三社区 Meetup 来了 ...

  6. 消息中间件学习总结(5)——RocketMQ之Apache RocketMQ背后的设计思路与最佳实践

    摘要:为了更好地让开发者们更加深入了解阿里开源,阿里云云栖社区在3月1号了举办"阿里开源项目最佳实践"在线技术峰会,直播讲述了当前阿里新兴和经典开源项目实战经验以及背后的开发思路. ...

  7. 哈啰在分布式消息治理和微服务治理中的实践

    简介:随着公司业务的不断发展,流量也在不断增长.我们发现生产中的一些重大事故,往往是被突发的流量冲跨的,对流量的治理和防护,保障系统高可用就尤为重要. 作者|梁勇 ​ 背景 ​ 哈啰已进化为包括两轮出 ...

  8. Apache RocketMQ:简单消息示例

    通过三种方式来发送RocketMQ消息使用: 可靠的同步发送, 可靠的异步发送和单向传输. 这个页面举例说明了这三种消息发送方式. 根据示例找出最适合你的特定用例. 可靠的同步传输 应用:可靠的同步传 ...

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

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

最新文章

  1. ISIS建立邻居的条件
  2. linux目录档案权限详解,五、Linux的档案权限与目录配置
  3. PHP IDE phpstorm 快捷键
  4. 大脑使用书全6册有用吗_常锻炼“人体第二大脑”的孩子,不仅智商高,记忆力也很强...
  5. 【java基础知识】连接mysql的工具类编写
  6. java打开的文件过多_显示打开文件数目过多的解决方法.
  7. 记一次 JAVA 的内存泄露分析
  8. python必备基础代码-python基础知识和练习代码
  9. param.requires_grad = False
  10. 高德地图入驻广州交警 实现“互联网+交通”无缝对接
  11. Axure RP 9基础教程(1)——界面及基本操作(看完就会画)
  12. 梅小雨20190919-5 代码规范,结对
  13. kindeditor跨域上传文件php,WebClient实现kindeditor跨域上传图片
  14. Java代码利用aspose-words将word文档转换成pdf和图片格式(PNG,JPG,JPEG破解 无水印)
  15. 记实现多racecar仿真过程中遇到的问题(一)
  16. python入门学习随记(十二)
  17. 《Git与Github使用笔记》第12章 Pull Request的使用
  18. c++图像处理之对比度拉伸变换
  19. 电机速度曲线规划1:梯形速度曲线设计与实现
  20. 公众账号迁移:微信订阅号怎么升级服务号?

热门文章

  1. 邀请合作如何表达_适时表达想法 才有利于彼此的合作
  2. guid java_JAVA实现生成GUID的方法
  3. 小程序promise封装post请求_Promise封装微信小程序的Request请求
  4. python为什么closed_为什么Python无法解析此JSON数据? [关闭] - Why can't Python parse this JSON data? [closed]...
  5. iptables 指定网卡_LINUX系统下的IPTABLES防火墙系统讲解(二)实战操作
  6. java观察者模式本质_6.[研磨设计模式笔记]观察者模式
  7. mysql lock_MySQL-锁总结
  8. Java设计模式之迭代器模式
  9. linux 找不到php命令,bash scp:未找到命令的解决方法
  10. 【学习笔记】结合代码理解设计模式 —— 代理模式(静态代理、动态代理、延伸)