RabbitMQ, ZeroMQ, Kafka 是一個層級的東西嗎, 相互之間有哪些優缺點?


RabbitMQ是一個AMQP實現,傳統的messaging queue系統實現,基於Erlang。老牌MQ產品了。AMQP協議更多用在企業系統內,對數據一致性、穩定性和可靠性要求很高的場景,對性能和吞吐量還在其次

Kafka是linkedin開源的MQ系統,主要特點是基於Pull的模式來處理消息消費,追求高吞吐量,一開始的目的就是用於日志收集和傳輸,0.8開始支持復制,不支持事務,適合產生大量數據的互聯網服務的數據收集業務

ZeroMQ只是一個網絡編程的Pattern庫,將常見的網絡請求形式(分組管理,鏈接管理,發布訂閱等)模式化、組件化,簡而言之socket之上、MQ之下。對於MQ來說,網絡傳輸只是它的一部分,更多需要處理的是消息存儲、路由、Broker服務發現和查找、事務、消費模式(ack、重投等)、集群服務等。

 

 

RabbitMQ/Kafka/ZeroMQ 都能提供消息隊列服務,但有很大的區別。

在面向服務架構中通過消息代理(比如 RabbitMQ / Kafka等),使用生產者-消費者模式在服務間進行異步通信是一種比較好的思想。

因為服務間依賴由強耦合變成了松耦合。消息代理都會提供持久化機制,在消費者負載高或者掉線的情況下會把消息保存起來,不會丟失。就是說生產者和消費者不需要同時在線,這是傳統的請求-應答模式比較難做到的,需要一個中間件來專門做這件事。其次消息代理可以根據消息本身做簡單的路由策略,消費者可以根據這個來做負載均衡,業務分離等。

缺點也有,就是需要額外搭建消息代理集群(但優點是大於缺點的 ) 。

ZeroMQ 和 RabbitMQ/Kafka 不同,它只是一個異步消息庫,在套接字的基礎上提供了類似於消息代理的機制。使用 ZeroMQ 的話,需要對自己的業務代碼進行改造,不利於服務解耦。

RabbitMQ 支持 AMQP(二進制),STOMP(文本),MQTT(二進制),HTTP(里面包裝其他協議)等協議。Kafka 使用自己的協議

Kafka 自身服務和消費者都需要依賴 Zookeeper。

RabbitMQ 在有大量消息堆積的情況下性能會下降,Kafka不會。畢竟AMQP設計的初衷不是用來持久化海量消息的,而Kafka一開始是用來處理海量日志的

總的來說,RabbitMQ 和 Kafka 都是十分優秀的分布式的消息代理服務,只要合理部署,不作,基本上可以滿足生產條件下的任何需求。

 

 

ZeroMQ,本地進程之間的coordination
RabbitMQ,工作消息隊列
Kafka, 日志訂閱,着重數據流處理

 

 

處理分布式事務方面,它們哪個更適合呢?是不是可以理解為老牌的RabbitMQ對一致性支持更好好一些!

 

 

好像很多公司 用zmq 只是用來方便地做socket。 比 Twisted 還方便。(比如我們)

但是的確是浪費了zmq 的很多特性。

 

 

RabbitMQ和Kafka基本上是一類東西,各有優劣,ZeroMQ只是一個網絡庫,不支持持久化。

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM