本质上都是MQ,但区别也较大,解决的问题不一样,层次不同。除了编程语言和执行性能的区别之外,最大的区别:
1、通信模式的区别常见消息队列实现了pub/sub模式,而zeromq提供了若干种。
2、有没有broker的区别常见消息队列是由broker来代理消息的持久化和转发的,而zeromq没有broker。但是你也不能说zeromq不是mq,或者说“zeromq在mq之下”、“仅仅是个网络库”,只要有先进先出+消息(不是流),就都可以自称是mq。
3、分布式一致性的区别常见分布式消息队列的broker之间通过zookeeper、raft等实现了分布式一致性,分布式管理已经替你解决了。在构建分布式系统时,如果需要一个解耦的、可分布式扩展的消息系统,此时,zeromq没有提供分布式管理功能。这个场景下,和企业级MQ相比,zeromq显得更像一个易用的socket而已,但你不能否认zeromq实现了mq的核心功能——消息(而不是流)+先进先出。其他有诸如持久化等等区别,但和分布式特性类似,且更加远离MQ的本质概念范畴了。只是说,为了满足现在大规模系统的需要,消息层往往需要分布式和持久化等等很多很多保障,所以给MQ加了很多附加要求,但是始终牢记,MQ的本质就是消息+队列。
RabbitMQ 选型和对比
1.从社区活跃度
按照目前网络上的资料,RabbitMQ
、activeM
、ZeroMQ
三者中,综合来看,RabbitMQ
是首选。
2.持久化消息比较
ZeroMq
不支持,ActiveMq
和RabbitMq
都支持。持久化消息主要是指我们机器在不可抗力因素等情况下挂掉了,消息不会丢失的机制。
3.综合技术实现
可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、插件系统等等。
RabbitMq
/ Kafka
最好,ActiveMq
次之,ZeroMq
最差。当然ZeroMq
也可以做到,不过自己必须手动写代码实现,代码量不小。尤其是可靠性中的:持久性、投递确认、发布者证实和高可用性。
4.高并发
毋庸置疑,RabbitMQ
最高,原因是它的实现语言是天生具备高并发高可用的erlang
语言。
5.比较关注的比较, RabbitMQ 和 Kafka
RabbitMq
比Kafka
成熟,在可用性上,稳定性上,可靠性上, RabbitMq胜于 Kafka] (理论上)。
另外,Kafka
的定位主要在日志等方面, 因为Kafka
设计的初衷就是处理日志的,可以看做是一个日志(消息)系统一个重要组件,针对性很强,所以 如果业务方面还是建议选择 RabbitMq
。
还有就是,Kafka
的性能(吞吐量、TPS
)比RabbitMq
要高出来很多。