RocketMQ是一个来自阿里巴巴的分布式消息中间件,于2012年开源,并在2017年正式成为Apache顶级项目。据了解,包括阿里云上的消息产品以及收购的子公司在内,阿里集团的消息产品全线都运行在RocketMQ之上,并且最近几年的双十一大促中,RocketMQ都有抢眼表现。
谈起消息系统中间件,就开源项目而言,户的选择其实很多,包括ActiveMQ、ZeroMQ、Kafka等。那到底RocketMQ又有什么优势?
Apache Kafka为日志处理而生,目前从社区来看,发力重点在流计算,IoT等领域,和Apache Spark Streaming,Apache Flink,Apache Storm等一站式流计算平台不同,它从Apache Samza这种轻量级方案汲取了养分,提供给用户的是一个异步编程框架, 用户基于类库编程,不需要考虑分发,部署,调度等一系列传统流计算框架带来的繁琐工作。这种轻量级的解决方案在一些日志处理, ETL等场景更受大家欢迎。
如果是应对一些高并发,可靠以及可比较苛刻的场景,Apache RocketMQ是一个不错的选择。最近留意到一个有趣的现象,国内一些中大型规模的公司普遍部署了两套消息引擎,一套选择 Apache RocketMQ脏交易,数据分发等核心链路上,一套选择Apache Kafka脏大数据等在线、离线分析链路上。无疑问,Kafka 目前在大数据生态建设这块,确实具备定的先发优势。
RocketMQ作为承载了阿里巴巴双十一万亿级数据体量的消息引擎,在电商,金融领域的优势也是比较明显的。目前,国内很多金融领域的领军企业在构建自己的分布式金融体系时,也都不约而同地选择了RocketMQ。
本学习文档可以学习到:
- 产品发展历史
- 专业术语
- 消息中间件需要解决那些问题
- RocketMQ Overview
- RocketMQ 存储特点
- RocketMQ 关键特性
- RocketMQ 消息过滤
- RocketMQ 通信组件
- RocketMQ 服务发现(Name Server)
限于篇幅,本文只做学习文档的部分展示,正在学习RocketMQ或者有需要的朋友可以来@Java架构师丨苏先生私信【中间件】即可获取以上所有的学习资料的免费领取方式。
一、前言
本学习文档旨在描述 RocketMQ 的多个关键特性的实现原理,并对消息中间件遇到的各种问题进行总结,阐述RocketMQ 如何解决这些问题。文中主要引用了 JMS 规范与 CORBA Notification 规范,规范为我们设计系统指明了方向,但是仍有不少问题规范没有提及,对于消息中间件又至关重要。RocketMQ 并不遵循任何规范,但是参考了各种规范与同类产品的设计思想。
二、产品发展历史
- Metaq(Metamorphosis) 1.x
- Metaq 2.x
- RocketMQ 3.x
三、专业术语
- Producer
- Consumer
- Push Consumer
- Pull Consumer
- Producer Group
- Consumer Group
- Broker
- 广播消费
- 集群消费
- 顺序消息
- 普通顺序消息
- 严格顺序消息
- Message Queue
四、消息中间件需要解决那些问题
本节阐述消息中间件通常需要解决哪些问题,在解决这些问题当中会遇到什么困难,RocketMQ 是否可以解决,规范中如何定义这些问题。
- Publish/Subscribe
- Message Priority
- Message Order
- Message Filter
- Message Persistence
- Message Reliabilty
- Low Latency Messaging
- At least Once
- Exactly Only Once
- Broker的Buffer满了怎么办?
- 回溯消费
- 消息堆积
- 分布式事务
- 定时消息
- 消息重试
五、RocketMQ Overview
- RocketMQ是什么?
- RocketMQ物理部署结构
- RocketMQ逻辑部署结构
![c93aa755-9017-eb11-8da9-e4434bdf6706.png](http://p01.5ceimg.com/content/c93aa755-9017-eb11-8da9-e4434bdf6706.png)
![ca3aa755-9017-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/ca3aa755-9017-eb11-8da9-e4434bdf6706.png)
六、RocketMQ 存储特点
- 零拷贝原理
- 文件系统
- 数据存储结构
- 存储目录结构
- 数据可靠性
![cc3aa755-9017-eb11-8da9-e4434bdf6706.png](http://p01.5ceimg.com/content/cc3aa755-9017-eb11-8da9-e4434bdf6706.png)
七、RocketMQ 关键特性
- 单机支持1万以上持久化序列
- 刷盘策略
- 消息查询
- 服务器消息过滤
- 长轮询 Pull
- 顺序消息
- 事务消息
- 发送消息负载均衡
- 订阅消息负载均衡
- 单队列并行消费
- 发送定时消息
- 消息消费失败,定时重试
- HA,同步双鞋/异步复制
- 单个JVM进程也能利用机器超大内存
- 消息堆积问题解决办法
![cf3aa755-9017-eb11-8da9-e4434bdf6706.png](http://p03.5ceimg.com/content/cf3aa755-9017-eb11-8da9-e4434bdf6706.png)
![d13aa755-9017-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/d13aa755-9017-eb11-8da9-e4434bdf6706.png)
八、RocketMQ 消息过滤
- 简单消息过滤
- 高级消息过滤
![d63aa755-9017-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/d63aa755-9017-eb11-8da9-e4434bdf6706.png)
九、RocketMQ 通信组件
- 网络协议
- 心跳处理
- 连接复用
- 超时连接
![da3aa755-9017-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/da3aa755-9017-eb11-8da9-e4434bdf6706.png)
写在最后
在分布式系统中,RocketMQ中间件是非常重要的组成,具有较高的技术门槛。同时,中间件相关的开源软件众多,适用场景各异,学习不易,对于初学者,或者正在学习RocketMQ的朋友可以来@Java架构师丨苏先生私信【中间件】即可获取以上所有的学习资料的免费领取方式。
冰冻三尺非一日之寒,掌握一门技术也不是一天两天的事情,重在坚持,程序员,加油!