RocketMQ系列:概述

     Apache RocketMQ是阿里开源的一款高性能、高吞吐量的分布式消息中间件。

一、系统部署架构

下图为RocketMQ系统部署架构:

Rocketmq.png

整体的架构设计主要分为四大部分,分别是:Producer、Consumer、Broker、NameServer。

  • Producer:消息生产者,可以集群部署。会先和 NameServer 集群中的随机一台建立长连接,得知当前要发送的 Topic 存在哪台 Broker Master上,然后再与其建立长连接,定时向Broker发送心跳。同时支持多种负载平衡模式发送消息。
  • Consumer:消息消费者,可以集群部署。会先和 NameServer 集群中的随机一台建立长连接,得知当前要消息的 Topic 存在哪台 Broker Master、Slave上,然后它们建立长连接,定时向Broker发送心跳。同时支持集群消费和广播消费消息。
  • Broker:主要负责消息的存储、查询消费,支持主从部署,一个 Master 可以对应多个 Slave。Master 支持读写,Slave 只支持读。Broker 会向集群中的每一台 NameServer 注册自己的路由信息。定期30s向NameServer上报Topic路由信息。
  • NameServer:是Topic 路由注册中心,支持 Broker 的动态注册和发现,保存 Topic 和 Borker 之间的关系。也是集群部署,但是各 NameServer 之间不会互相通信, 各 NameServer 都有完整的路由信息,即无状态。

二、RocketMQ常见名词

  1. Topic : 消息主题,一级消息类型,通过Topic对消息进行分类。
  2. Producer : 消息生产者,负责生产并发送消息。
  3. Consumer : 消息消费者,负责接收并消费消息。根据消费方式分为两类:
    • Push Consumer:消息由消息队列推送至Consumer。
    • Pull Consumer:Consumer主动从消息队列拉取消息。可以一次拉取固定数量消息,防止Consumer打垮。
  4. Group:生产组(Producer Group)或消费组(Consumer Group),Producer或Consumer通常生产或消费同一类消息,且消息发布或订阅的逻辑一致。这样可以实现负载均衡和容错策略。
  5. Tag : 消息标签,二级消息类型,可以对Topic下消息进一步分类。
  6. Message ID:消息全局唯一标识。
  7. Message Key:消息业务标识Key,可以通过Key进行Hash打到相同消息队列中。
  8. Message: 消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。每个消息拥有唯一的Message ID,且可以携带具有业务标识的Key。
  9. offset:偏移量可以认为就是消息下标。offset是long 类型,不会溢出。
  10. 集群消费:相同Group 的消费组下的所有Consumer平分消费消息。
  11. 广播消费:所有Consumer都会消费消息,保证消息至少被每个消费者消费一次。但不会重发消费消息失败需要业务方关注。
  12. 延迟消息:生产端设定一个时间点,消费端并不立即消费到,直到设定的时间点后消费端才收到消息。现阶段只支持时间级别,后续会支持自定义时间点。
  13. 事务消息:通过消息队列事务消息能达到分布式事务的最终一致。
  14. 顺序消息:消息生产端按照指定的Sharding Key发送消息时进行分区,消费端则按照消息的发送时间先后顺序消费。
  15. 消息堆积:Producer生产消息后,消费端由于处理能力慢或者其他因素导致消息没有被及时消费掉。业务方可以基于消息堆积进行监控告警,可以扩容消费端或者限制发送消息速率。
  16. 消息过滤:根据消息Tag标签进行过滤,只接受符合条件的消息。消费者订阅消息支持多种方式包括运算符,等于null或者*,则表示全部订阅。
  17. 消息轨迹:一条消息从Producer发出到Consumer消费处理过程中,由各个相关节点的时间、ip等数据汇聚而成的完整链路信息。通过消息轨迹,您能清晰定位消息从Producer发出,经由消息队列服务端,投递给Consumer的完整链路,方便定位排查问题。

三、RocketMQ常用场景

1、异步解耦

     生产者发送消息到MQ中,然后下游消费端订阅Topic获取消息并完成后续消息。生产端不会因为消息没处理而阻塞,可以完成后续逻辑处理。下游业务端根据消息进行不同业务逻辑处理。
     例如订单发送消息后,下游物流、售后、保险等业务订阅消息并完成相应逻辑处理,互不影响。

2、削峰填谷

     当业务方发起的请求,下游系统在短时间内无法处理海量请求数据,导致系统压力大甚至会导致系统崩溃等问题而发生漏通知的情况。可以堆积在MQ中,下游系统按照消费能力进行处理消息,秒杀系统就是这么实现的。

3、 订阅场景

     当上游系统发起请求希望客户端都能够收到消息,RocketMQ支持 Consumer 使用广播模式,每条消息都会被 Consumer 集群内所有的 Consumer 实例消费一次。常见场景消息通知。

4、分布式事务一致性

     业务方希望将消息发送和业务持久化逻辑处理作为原子性,希望要么都成功,要么都失败。 消息队列RocketMQ版提供类似X或Open XA的分布式事务功能,通过消息队列RocketMQ版事务消息,能达到分布式事务的最终一致。下图则是Rocketmq支持的事务消息的流程处理。

事务消息.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容