1. 什么是RocketMQ?
是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。
Producer、Consumer、队列都可以分布式。
Producer 吐一些队列轮流収送消息,队列集合称为Topic,Consumer 如果做广播消费,则一个consumer
实例消费返个Topic 对应的所有队列,如果做集群消费,则多个Consumer 实例平均消费返个topic 对应的
队列集合。
能够保证严格的消息顺序
提供丰富的消息拉叏模式
高效的订阅者水平扩展能力
实时的消息订阅机制
亿级消息堆积能力
较少的依赖
RocketMQ作为阿里巴巴的两大分布式技术之一,是一款纯java、分布式、队列模型的开源消息中间件,他参考了Java的JMS规范,但是它并没有遵循JMS的规范,经历了淘宝双十一的洗礼,在功能和性能上据说是远超ActiveMQ。
2. RocketMQ发展史
1. Metaq(Metamorphsis) 1.x
由开源社区killme2008维护,开源社区非常活跃。
github地址:https://github.com/killme2008/Metamorphosis
2. Metaq 2.x
于2012年10月份上线,在淘宝内部被广泛使用。
3. RecoketMQ 3.x
metaq 3.0发布时,产品名称改为RocketMQ。基于公司内部开源共建原则,RocketMQ项目只维护核心功能,且去除了所有其他运行时的依赖,核心功能最简化。每个BU的个性化需求都在RocketMQ项目之上进行深度定制。RocketMQ向其他BU提供的仅仅是jar包,例如要定制一个Broker,那么只需要依赖rocketmq-broker这个jar包即可,可通过API进行交互,如果定制client,则依赖rocketmq-client这个jar包,对其提供的api进行再封装。
开源社区地址:https://github.com/apache/RocketMQ
3. RocketMQ特性
原生分布式
要知道RocketMQ原生就是支持分布式的,而ActiveMQ原生存在单点性。
严格消息顺序
RocketMQ可以保证严格的消息顺序,而ActiveMQ无法保证!
亿级消息堆积
RocketMQ提供亿级消息的堆积能力,这不是重点,重点是堆积了亿级的消息后,依然保持写入低延迟!
两种的消息拉取模式(Push or Pull)。
Push好理解,比如在消费者端设置Listener回调;而Pull,控制权在于应用,即应用需要主动的调用拉消息方法从Broker获取消息,这里面存在一个消费位置记录的问题(如果不记录,会导致消息重复消费)。
特有的分布式协调器
在Metaq1.x/2.x的版本中,分布式协调采用的是Zookeeper,而RocketMQ自己实现了一个NameServer,更加轻量级,性能好!
组(Group)
有了Producer/Consumer Group。
ActiveMQ中并没有Group这个概念,而在RocketMQ中理解Group的机制很重要。想过没有,通过Group机制,让RocketMQ天然的支持消息负载均衡!比如某个Topic有9条消息,其中一个Consumer
Group有3个实例(3个进程 OR 3台机器),那么每个实例将均摊3条消息!(注意RocketMQ只有一种模式,即发布订阅模式。)
其他
消息失败重试机制、高效的订阅者水平扩展能力、强大的API、事务机制等等