阿里系下开源的一款分布式、行列步队模型的中间件,原名Metaq,3.0版本名称改为RocketMQ,是阿里参照kafka设计思想利用java实现的一套mq。同时将阿里系内部多款mq产品(Notify、metaq)进行整合,只掩护核心功能,去除了所有其他运行时依赖,担保核心功能最简化,在此根本上合营阿里上述其他开源产品实现不同场景下mq的架构,目前紧张多用于订单交易系统。
具有以下特点:
1.能够担保严格的顺序

2.供应针对的过滤功能
3.供应丰富的拉取模式
4.高效的订阅者水平扩展能力
5.实时的订阅机制
6.亿级堆积能力
RabbitMQ
利用Erlang编写的一个开源的行列步队,本身支持很多的协议:AMQP,XMPP, SMTP,STOMP,也正是如此,使的它变的非常重量级,更适宜于企业级的开拓。同时实现了Broker架构,核心思想是生产者不会将直接发送给行列步队,在发送给客户端时先在中央行列步队排队。对路由(Routing),负载均衡(Load balance)、数据持久化都有很好的支持。多用于进行企业级的ESB整合。
ActiveMQ
Apache下的一个子项目。利用Java完备支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,少量代码就可以高效地实现高等运用处景。可插拔的传输协议支持,比如:in-VM, TCP, SSL, NIO, UDP, multicast, JGroups and JXTA transports。RabbitMQ、ZeroMQ、ActiveMQ均支持常用的多种措辞客户端 C++、Java、.Net,、Python、 Php、 Ruby等。
Redis
利用C措辞开拓的一个Key-Value的NoSQL数据库,开拓掩护很生动,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,以是完备可以当做一个轻量级的行列步队做事来利用。对付RabbitMQ和Redis的入队和出队操作,各实行100万次,每10万次记录一次实行韶光。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。
Kafka
Apache下的一个子项目,利用scala实现的一个高性能分布式Publish/Subscribe行列步队系统,具有以下特性:
快速持久化:通过磁盘顺序读写与零拷贝机制,可以在O(1)的系统开销下进行持久化;
高吞吐:在一台普通的做事器上既可以达到10W/s的吞吐速率;
高堆积:支持topic下消费者较永劫光离线,堆积量大;
完备的分布式系统:Broker、Producer、Consumer都原生自动支持分布式,依赖zookeeper自动实现繁芜均衡;
支持Hadoop数据并行加载:对付像Hadoop的一样的日志数据和离线剖析系统,但又哀求实时处理的限定,这是一个可行的办理方案。
ZeroMQ
号称最快的行列步队系统,专门为高吞吐量/低延迟的场景开拓,在金融界的运用中常常利用,侧重于实时数据通信场景。ZMQ能够实现RabbitMQ不善于的高等/繁芜的行列步队,但是开拓职员须要自己组合多种技能框架,开拓本钱高。因此ZeroMQ具有一个独特的非中间件的模式,更像一个socket library,你不须要安装和运行一个做事器或中间件,由于你的运用程序本身便是利用ZeroMQ API完成逻辑做事的角色。但是ZeroMQ仅供应非持久性的行列步队,如果down机,数据将会丢失。如:Twitter的Storm中利用ZeroMQ作为数据流的传输。
ZeroMQ套接字是与传输层无关的:ZeroMQ套接字对所有传输层协议定义了统一的API接口。默认支持 进程内(inproc) ,进程间(IPC) ,多播,TCP协议,在不同的协议之间切换只要大略的改变连接字符串的前缀。可以在任何时候以最小的代价从进程间确当地通信切换到分布式下的TCP通信。ZeroMQ在背后处理连接建立,断开和重连逻辑。
特性:
无锁的行列步队模型:对付跨线程间的交互(用户端和session)之间的数据交流通道pipe,采取无锁的行列步队算法CAS;在pipe的两端注册有异步事宜,在读或者写到pipe的时,会自动触发读写事宜。
批量处理的算法:对付批量的,进行了适应性的优化,可以批量的吸收和发送。
多核下的线程绑定,无须CPU切换:差异于传统的多线程并发模式,旗子暗记量或者临界区,zeroMQ充分利用多核的上风,每个核绑定运行一个事情者线程,避免多线程之间的CPU切换开销。
多种比较选择:
1.TPS比较 一ZeroMq 最好,RabbitMq 次之, ActiveMq 最差。
2.持久化比较—zeroMq不支持,activeMq和rabbitMq都支持。持久化紧张是指:MQ down或者MQ所在的做事器down了,不会丢失的机制。
3.可靠性、灵巧的路由、集群、事务、高可用的行列步队、排序、问题追踪、可视化管理工具、插件系统、社区—RabbitMq最好,ActiveMq次之,ZeroMq最差。
4.高并发—从实现措辞来看,RabbitMQ最高,缘故原由是它的实现措辞是天生具备高并发高可用的erlang措辞。
5.RabbitMQ的性能相对来说更好更全面,是中间件的首选
感谢阅读,如果以为本文对你有帮助,记得点个赞再走哦~