"Apache RocketMQ is an open source distributed messaging and streaming data platform."
——Apache RocketMQ社区官网
Apache RocketMQ是一款开源的、分布式的消息投递与流数据平台。出生自阿里巴巴,在阿里巴巴内部经历了3个版本后,作为Apache顶级开源项目之一直到现在。在GitHub上有10000 + star、5000 + fork、170 + contributors(在GitHub上提交代码并被采纳的开发者),目前的最新版本是2020年3月的4.7.0版本。
本节主要介绍RocketMQ的产生和成长过程。
纵观Apache RocketMQ从开始发展到现在,和一个人的成长历程类似,如图1-7所示。
图1-7
1.RocketMQ的前世
和大部分组件产生的原因类似,阿里巴巴内部为了适应淘宝 B2C 的更快、更复杂的业务,2001年启动了“五彩石项目”,阿里巴巴的第一代消息队列服务Notify就是在这个背景下产生的。
2010 年,阿里巴巴内部的 Apache ActiveMQ 仍然作为核心技术被广泛用于各个业务线,而顺序消息、海量消息堆积、完全自主控制消息队列服务,也是阿里巴巴同时期急需的。在这种背景下,2011年,MetaQ诞生。
2.RocketMQ云化
2011年,LinkedIn将Kafka开源。2012年,阿里巴巴参考Kafka的设计,基于对MetaQ的理解和实际使用,研发了一套通用消息队列引擎,也就是 RocketMQ。自此才有了第一代真正的RocketMQ,2016年阿里云上线云RocketMQ消息队列服务。
自2001年到2012年,11年的实际使用、运维,和业务不断碰撞,才得以抽象并整理出一个真正的行业级产品,技术从来不简单,只是你看不见!
3.Apache RocketMQ“毕业”
2016年11月,阿里巴巴将RocketMQ捐献给Apache基金会。
Apache社区有一个很重要的理念:社区大于代码。虽然RocketMQ已经开源3年,在国内小有名气,而且在阿里巴巴被广泛应用并有较好的效果,但是依然不能达到 Apache优秀项目的标准。
在RocketMQ被捐献后,通过一系列的修改、评审、调整,悄悄升级至4.0版本,正式进入孵化阶段。
2017年09月25日,RocketMQ成功“毕业”(Apache社区项目孵化成功即为毕业),成为 Apache 顶级项目,它是国内首个互联网中间件在 Apache 的顶级项目,也是继ActiveMQ、Kafka后Apache家族中全新的一代消息队列引擎。
随着不断地更新升级,RocketMQ 的能力也越来越强大,如图 1-8 所示,这是阿里巴巴双11的消息量的部分统计,可以看出RocketMQ处理的消息量已经在万亿条级别。
图1-8
2017年10月14日,分布式消息领域的国际标准OpenMessaging宣布加入Linux基金会。2018年,RocketMQ开发团队和社区着手思考Apache RocketMQ 5.0计划——研发Cloud Native,与OpenMessaging更加紧密地结合在一起。
2018年,可谓是RocketMQ蓬勃发展的一年,ACL、消息轨迹、DLedger等新特性被提交到社区,还有Spring Starter、CPP、Python、Go、NodeJS等多语言的客户端也相继面世。随着社区不断有新的贡献者加入,Flink、Spark、ELK、IoT等更多的周边产品会更加完善,如图1-9所示。
如果你想要贡献代码,需要怎么做呢?按照 Apache 的工作方式,如果想要向社区提交自己的创新或改进的想法,那么首先要发起一个RIP。
关于RIP(RocketMQ Improvement Proposal,RocketMQ改善提案),在Apache的社区文档中是这样解释的:在过去,我们希望同学们以提交GitHub Issue的方式添加一个新功能。这是一种非常棒的提交方式,但却不正规、不易追踪和管理,所以我们介绍RIP机制来替代提交新功能的流程。
RIPs面向用户和大版本的改进,而不是小改动。当大家在怀疑改动大小时,Committer (在GitHub上拥有代码合并权限的开发者)应该考虑RIP是否可以派上用场。
图1-9
怎么提交一个RIP呢?很简单,请参照如图1-10所示的流程。
图1-10
Apache RocketMQ——金融级消息队列,一个拥有亚毫秒级延迟、万亿级消息容量保证、高消息容错设计的中间件,在阿里巴巴、VIPKID、微众银行、民生银行、蚂蚁金服、滴滴等国内知名互联网公司的实践中,有着完美的表现。
随着RocketMQ 5.0的发布,借助OpenMessaging提供跨平台、多语言的能力,将会打通 Prometheus、ELK 等上游组件,通过消息、Streaming 等形式将数据扭转到 Flink、Elasticsearch、Hbase、Spark、Hbase等下游组件。届时整个生态体系将会更加完美、便捷。
目前国内关于 Apache RocketMQ 社区的开源工作和最新资讯主要都在钉钉群(21791227和21982288)中体现,大家可以进群了解和学习。