本質上都是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
要高出來很多。