加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • RocketMQ 简介
    • RocketMQ发展史
    • 为什么要选择Apache RocketMQ
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

一文了解Apache RocketMQ

12/09 11:50
555
阅读需 10 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

RocketMQ 简介

Apache RocketMQ是一款Apache 开源的、分布式的高性能消息中间件和流数据处理平台。RocketMQ的前身是MetaQ,当时是阿里巴巴内部的消息中间件经过阿里巴巴“双十一”的长期磨炼,MetaQ经受住了各种海量用户、高并发场景的考验。在这个过程中修炼成了很多内功,而这些内功实际上是可以应对不同业务场景的需求的。在阿里巴巴内部经过3个版本迭代后,把MetaQ进化成了更为通用的RocketMQ。到了2017年,阿里巴巴决定把RocketMQ贡献给了Apache,并成功“毕业”。成为Apache顶级开源项目之一,并一直到现在。

因为其强大的特效,出色的性能表现,在国内有很多互联网企业纷纷基于RocketMQ搭建自身的技术架构。经过多年的实践,无论是千万DAU的大型互联网应用,还是业务复杂的金融应用,都取得了许多成功的实践经验。时至今日,Apache RocketMQ已经发展成为国内首屈一指的消息中间件。

RocketMQ在GitHub上的社区也非常活跃,现在已经有19万多的star和10万多的fork,足以可见其社区的成熟度。目前,Apache RocketMQ的最新版本是5.1,是一个基于云原生时代的全新版本。值得注意的是,因为本书撰写时间的限制,所有的特性及原理更多是基于4.x的最新版本,也就是4.9的版本。4.x的版本也是业界中使用最广泛,最为稳定的版本。

RocketMQ发展史

纵观整个Apache RocketMQ的发展历史,最早可以追溯到2007年的阿里巴巴内部的Notify项目。在经过了十年的发展,在2017年正式成为Apache顶级项目,也是国内首个互联网中间件在Apache上的顶级项目。在经过接近10年的发展后,互联网场景下的消息应用已经被充分的实践,而这个过程中,RocketMQ一直在经受国内互联网高速发展而带来的挑战,已经被充分地验证过,是一款非常可靠的消息中间件。其发展的历程如图1总结所示:

为了支持阿里巴巴内部适应淘宝更为复杂的业务,更为海量的使用场景,阿里巴巴启动了第一代的消息队列服务研发,名称为Notify,这款消息中间件也是阿里巴巴第一次在消息中间件领域的尝试,期间积累了很多国内互联网特有的使用场景的设计经验。随着阿里巴巴业务的急速发展,消息量极大地上升,阿里巴巴急需一款对于消息堆积有海量支撑能力的消息中间件。在这个背景下,阿里巴巴在充分研究过Kafka原理后,借鉴了其很多优秀的设计经验,设计出了RocketMQ。

自此RocketMQ正式诞生。随着RocketMQ在阿里巴巴内部“双十一”的优异表现,越来越多人开始研究并使用RocketMQ。在开源三年后,RocketMQ已经在国内小有名气,终于在2016年,阿里巴巴决定贡献给Apache。在通过社区的一系列修改、评审及一些代码调整后,RocketMQ以4.0版本的新面目正式进入Apache的孵化阶段,并于2017年成功“毕业”,成为Apache的顶级项目,这是国内首个互联网中间件在Apache的顶级项目,也是继ActivveMQ、Kafka后,Apache消息中间件家族的一员“猛将”。

为什么要选择Apache RocketMQ

既然要做选型,就要了解对应技术对象的重要特性和表现。相信到这里,读者已经知道了大型互联网系统能从消息中间件中获取最重要的三项收益,那么接下来将看看如果将这三个任务交由 Apche RocketMQ 来完成的话,它的表现如何。

1. RocketMQ处理削峰填谷的表现

一个消息中间件要能做到削峰填谷,需要对其性能有很高的要求,因为它需要自身撑得住洪峰的流量。否则,如果它的性能和业务应用的性能表现差不多的话,开发人员何必引入中间件?RocketMQ 在性能上有很好的表现,按照公开的压测数据,RocketMQ 能拥有媲美 Kafka 的性能发送表现,并且在大量分区的场景下性能远超 Kafka。除了性能之外,削峰填谷还要求消息中间件有很好的堆积能力,因为生产端的速率可能远超消费端,如果消息持续的大量生产,就有大量消息堆积的情况发生。RocketMQ 的消息堆积能力是无上限的,理论上其堆积的能力就是其磁盘可用的大小,且在消息大量堆积的场景中,在性能上维持很好的表现。

2. RocketMQ如何实现解耦

RocketMQ 使用的是 Topic+ 订阅的模式作为其消息模型,所以消息是支持同时分发到不同的消费者组的,这个模型对于消息解耦来说异常重要。它使得生产者可以完全不关心有谁在订阅消息,也不关心消费者有几个,是否在线等,只需要关注消息生产即可。剩下的工作均由 RocketMQ 解决。同时 RocketMQ 还支持广播模式,对于需要把消息投递到所有实例的场景,RocketMQ也能很好支持。

3. RocketMQ的最终一致性特性。

实际上,利用消息系统做最终一致性需要消息系统很多方面的努力。从特性上,RocketMQ 支持消息高可靠,消息的可靠投递,甚至还支持事务性消息,这使得 RocketMQ 可以成为互联网场景下做最终一致性的“屠龙宝刀”。从以上三点上看,RocketMQ对于这三大任务完成度都很高,是互联网高并发场景下的“神器”。

4. 常见消息中间件特性对比

为方便大家做选项参考,表1从特性、性能、运维的角度对比了主流消息中间件,供读者参考。

表1.常见消息中间件特性对比

RocketMQ在“双十一”的表现

作为最具有挑战的消息应用场景之一:“双十一”,RocketMQ的表现极为优异。公开的资料表示,RocketMQ在2016年的“双十一”上已经支撑了超过10000亿的消息流转,其性能及稳定性让人瞩目,如图2所示。

现在的RocketMQ,已经被国内众多互联网公司广泛地使用,除了阿里巴巴以外,RocketMQ还在微众银行、OPPOVIVO、小米、VIPKID、蚂蚁金服、滴滴等知名的互联网公司实践中,不断地证明自己是一个能适应于各种场景的、可靠的、高性能的消息中间件。以上内容节选自《Apache RocketMQ 进阶之路》

推荐阅读

本书以Apache RocketMQ 4.9.5(编写本书时最新的4.x版本)为基础,从Apache RocketMQ 的实际使用、原理剖析,大规模消息集群下企业级落地的实践以及所面临的挑战,逐一由浅入深地进行讲解。

全书分3篇,共16章。基础篇包含第1~4章,主要讲解Apache RocketMQ 入门以及如何掌握Apache RocketMQ 的基础使用。原理篇包含第5~12章,主要讲解了消费原理、负载均衡原理、顺序消息原理等核心的RocketMQ部分。进阶篇包含第13~16章,主要讲解消息幂等、双活设计等进阶为架构师必须掌握的内容。讲解过程中抛弃了传统的源码解析这种较枯燥的手段,而是更多地利用以下方式帮助读者更快、更轻松地接受Apache RocketMQ的原理:通过近百张原创的手绘图,形象地描述Apache RocketMQ 的运作过程、原理;通过与Kafka、RabbitMQ等成熟的消息中间件产品做对比的方式,有助于读者对相关知识触类旁通,举一反三;每章都有思考题,以便于读者总结思考所学内容,进行灵活运用。

撰  稿  人:计旭

责任编辑:张淑谦

审  核  人:曹新宇

相关推荐

电子产业图谱