1.0 RocketMQ简介
1 RocketMQ的前世今生
RocketMQ是一款阿里巴巴开源的消息中间件,在2017年9月份成为Apache的顶级项目,是国内首个互联网中间件在 Apache 上的顶级项目。
RocketMQ的起源受到另一款消息中间件Kafka的启发。最初,淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容。为了进一步降低成本和提升写入性能,需要在存储部分可以进一步优化,2011年初,Linkin开源了Kafka这个优秀的消息中间件,淘宝中间件团队在对Kafka做过充分Review之后,被Kafka无限消息堆积,高效的持久化速度所吸引。
不过当时Kafka主要定位于日志传输,对于使用在淘宝交易、订单、充值等场景下还有诸多特性不满足,例如:延迟消息,消费重试,事务消息,消息过滤等,这些都是一些企业级消息中间件需要具备的功能。为此,淘宝中间件团队重新用Java语言编写了RocketMQ,定位于非日志的可靠消息传输。不过随着RocketMQ的演进,现在也支持了日志流式处理。
目前RocketMQ经过了阿里多年双十一大促的考验,性能和稳定性得到了充分的严重。目前在业界被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binlog分发等场景。
RocketMQ整个产品发展历史主要经历以下几个阶段:
阶段1:Metaq(Metamorphosis) 1.x
由开源社区 killme2008 维护,开源社区地址:https://github.com/killme2008/Metamorphosis,最后一次更新是在2017年1月份。
阶段2:Metaq 2.x
于 2012 年 10 月份上线,在淘宝内部被广泛使用。
阶段3:RocketMQ 3.x
基于阿里内部开源共建原则, RocketMQ 项目只维护核心功能,且去除了所有其他运行时依赖,核心功能最简化。每个 BU 的个性化需求都在 RocketMQ 项目之上进行深度定制。 RocketMQ 向其他 BU 提供的仅仅是Jar 包,例如要定制一个 Broker,那么只需要依赖 rocketmq-broker 这个 jar 包即可,可通过 API 迕行交互,如果定制 client,则依赖 rocketmq-client 这个 jar 包,对其提供的 api 进行再封装。开源社区地址:https://github.com/alibaba/RocketMQ,目前已无法访问。
阶段4:进入Apache
2016年11月28日,阿里巴巴向 Apache 软件基金会捐赠消息中间件 RocketMQ,成为 Apache 孵化项目。美国时间 2017 年 9 月 25 日,Apache 软件基金会(ASF)宣布 Apache®RocketMQ™ 已孵化成为 Apache 顶级项目(TLP ),是国内首个互联网中间件在 Apache 上的顶级项目。官网地址:http://rocketmq.apache.org/
2 与其他MQ对比
目前业界还有很多其他MQ,如Kafka、RabbitMQ、ActiveMQ、Apache Pulsar等。下图列出了全球范围内这些MQ在2018.12~2019.12一年时间内,在Google Trends的搜索频率,某种程度可以反映出这些中间件的火爆程度。
从这张图上,我们可以看出来,Kafka是一枝独秀,RabbmitMQ紧接其后,ActiveMQ和Apache Pulsar也有一定的占比。而RocketMQ的搜索量可以说是微乎其微。
对于除了RocketMQ的其他几个MQ产品,可以根据这张图初步对比下流行程度。但是对于RocketMQ必须排除在外,因为一些原因,很多国内的用户无法通过Google进行搜索,因此关于RocketMQ的统计实际上是不准确的。
而在这里,我们主要对比的是RocketMQ与其他MQ有哪些功能特性上的差异。功能特性,主要取决于产品定位,如Kafka定位于高吞吐的流失日志和实时计算场景;ActiveMQ、RabbitMQ等则定位于企业级消息中间件,因此提供了很多企业开发时非常有用的功能,如延迟消息、事务消息、消息重试、消息过滤等,而这些特性Kafka都不具备,但是这类产品的吞吐量要明显的低于Kafka。
RocketMQ则是结合了Kafka和ActiveMQ、RabbitMQ的特性。在性能上,可以与Kafka抗衡;而在企业级MQ的特性上,则具备了很多ActiveMQ、RabbitMQ提供的特性。因此,企业在选择消息中间件选型时,RocketMQ是非常值得考虑的一款产品。
下图列出了RocketMQ与其他消息中间件的对比: