常见消息中间件比较

rabbitMQ:
rabbitmq是Erlang编写的开源消息队列,通过Actor模型实现了数据的稳定可靠传输。
rabbitmq由Exchange,Binding,queue组成,exchange和binding组成了消息的路由。
producer通过连接channel和server进行通信。
consumer从queue获取消息进行消费。rabbitMQ有消息的确认机制。
rabbitmq实现了代理(Broker)架构,发送到客户端消息可以在中央节点上排队。
此特性使得RabbitMQ易于使用和部署,适宜于很多场景如路由、负载均衡或消息持久化等,但是这使得它的可扩展性差,速度较慢,因为中央节点增加了延迟,消息封装后也比较大,rabbitMQ支持miror的queue,主queue失效,miror queue接管。rabbitMQ在吞吐量方面稍逊于kafka,rabbitMQ支持对消息的可靠的传递,支持事务,不支持批量的操作基于存储的可靠性的要求存储可以采用内存或者硬盘。
总的来说,RabbitMQ在数据一致性、稳定性和可靠性方面比较优秀,而且直接或间接的支持多种协议,对多种语言支持良好。但是其性能和吞吐量差强人意。
kafka:
Kafka是是一个高性能跨语言分布式Publish/Subscribe消息队列系统,以Pull的形式消费消息。
具有特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既以达到10W/s 的吞吐速率; 完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现复杂均衡。实现了消息顺序和海量堆积。
kafka由producer,broker,consumer组成,以consumer为中心,消息的消费信息保存的客户端consumer上, consumer根据消费的点,从broker上批量pull数据;无消息确认机制。kafka具有高的吞吐量,内部采用消息的批量处理,zero-copy机制,数据的存储和获取是本地磁盘顺序批量操作,具有O(1)的复杂度,消息处理的效率很高。
kafka的broker支持主备模式。
kafka采用zookeeper对集群中的broker、consumer进行管理,可以注册topic到zookeeper上;通过zookeeper的协调机制,producer保存对应topic的broker信息,可以随机或者轮询发送到broker上;并且producer可以基于语义指定分片,消息发送到broker的某分片上。
支持Hadoop数据并行加载(partition),对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解
决方案。Kafka通过Hadoop的并行加载机制来统一了在线和离线的消息处理。
总结:
Kafka自身服务与消息的生产和消费都依赖于Zookeeper,使用Scala语言开发。因为其消息的消费使用客户端Pull方式,消息可以被多个客户端(group)消费,理论上消息会重复,但是不会丢失(除非消息过期)。
rocketMQ:
RocketMQ是阿里开源的消息中间件,使用纯Java开发,具有高吞吐量、高可用性、适合大规模分布式
系统应用的特点。它对消息的可靠传输及事务性做了优化 与Kafka一脉相
承(甚至更优),性能强劲,支持海量堆积。
ActiveMQ:
是Apache下的一个子项目,介于ZeroMQ和RabbitMQ之间。
支持OpenWire、Stomp、AMQP v1.0、MQTT v3.1、REST、Ajax、Webservice等多种协议;完全支持JMS1.1和J2EE 1.4规 范(事务、持久化、XA消息);支持持久化到数据库。但是ActiveMQ不够轻巧,而且对于队列较多的情况支持不好,有丢消息的情况。

ZeroMQ:
ZeroMQ号称是“史上最快的消息队列”,尤其针对大吞吐量的需求场景,基于c语言开发的,可以在任何平台通过任何代码连 接, 通过inproc、IPC、TCP、TIPC、多播传送消息,支持发布-订阅、推-拉、共享队列等模式,高速异步I/O引擎。
ZMQ能够实现RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合多种技术框架,技术上的复杂度是对这MQ能 够应用成功的挑战。ZeroMQ具有一个独特的非中间件的模式,你不需要安装和运行一个消息服务器或中间件,因为你的应用 程序将扮演了这个服务角色。你只需要简单的引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之 间发送消息了。
但是ZeroMQ仅提供非持久性的队列,也就是说如果down机,数据将会丢失。
根据官方的说法,ZeroMQ是一个简单好用的传输层,像框架一样的可嵌入的socket类库,使Socket编程更加简单、简洁、性 能更高,是专门为高吞吐量/低延迟的场景开发的。ZeroMQ与其他MQ有着本质的区别,它根本不是消息队列服务器,更类似 与一个底层网络通讯库,对原有Socket API进行封装,在使用的使用引入对应的jar包即可,可谓是相当灵活。
同时,因为它的简单灵活,如果我们想作为消息队列使用的话,需要开发大量代码。而且,ZeroMQ不支持消息持久化,其定 位并不是安全可靠的消息传输,所以还需要自己编码保证可靠性。简而言之一句话,ZeroMQ很强大,但是想用好需要自己实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值