閱讀386 返回首頁    go 阿裏雲 go 技術社區[雲棲]


消息中間件kafka與activemq、rabbitmq、zeromq、rocketmq的比較

 

消息隊列(Message Queue,簡稱 MQ)是阿裏巴巴集團中間件技術部自主研發的專業消息中間件。

分布式消息係統作為實現分布式係統可擴展、可伸縮性的關鍵組件,需要具有高吞吐量、高可用等特點。而談到消息係統的設計,就回避不了兩個問題:

常用消息隊列有:kafka、activemq、rabbitmq等。

 

一、kafka:

1、不完全符合jms規範,注重吞吐量,類似udp 和 tcp;

2、一般做大數據吞吐的管道 我們現在的用途就是負責在各個idc之間通信;

3、量大 對數據不是百分之百保證的,會有數據丟失,不是百分百送達(amq和rmq等有重發機製,而kafka沒有,前者通過設置,可以有消息重新發送, 可以查詢得知消息是否送達, 但是kafka不知道你發出去了,但是你不知道你消息送沒送達);

      在吞吐量有提升 ,在這方麵就得有犧牲, 所以kafka適合大數據量流轉, 比如日誌數據 比如用作統計的數據。

二、activemq

ActiveMQ居於兩者之間,類似於ZemoMQ,它可以部署於代理模式和P2P模式。類似於RabbitMQ,它易於實現高級場景,而且隻需付出低消耗。它被譽為消息中間件的“瑞士軍刀”。

 

三、rabbitmq

RabbitMQ是AMQP協議領先的一個實現,它實現了代理(Broker)架構,意味著消息在發送到客戶端之前可以在中央節點上排隊。此特性使得RabbitMQ易於使用和部署,適宜於很多場景如路由、負載均衡或消息持久化等,用消息隊列隻需幾行代碼即可搞定。但是,這使得它的可擴展性差,速度較慢,因為中央節點增加了延遲,消息封裝後也比較大。

 

要注意一點,ActiveMQ的下一代產品為Apollo。

 

四、zeromq

ZeroMQ是一個非常輕量級的消息係統,專門為高吞吐量/低延遲的場景開發,在金融界的應用中經常可以發現它。與RabbitMQ相比,ZeroMQ支持許多高級消息場景,但是你必須實現ZeroMQ框架中的各個塊(比如Socket或Device等)。ZeroMQ非常靈活,但是你必須學習它的80頁的手冊(如果你要寫一個分布式係統,一定要閱讀它)。

五、rocketmq

RocketMQ 是一款開源的分布式消息係統,基於高可用分布式集群技術,提供低延時的、高可靠的消息發布與訂閱服務。同時,廣泛應用於多個領域,包括異步通信解耦、企業解決方案、金融支付、電信、電子商務、快遞物流、廣告營銷、社交、即時通信、移動應用、手遊、視頻、物聯網、車聯網等。

具有以下特點:

  • 能夠保證嚴格的消息順序

  • 提供豐富的消息拉取模式

  • 高效的訂閱者水平擴展能力

  • 實時的消息訂閱機製

  •   億級消息堆積能力

  • Metaq3.0 版本改名,產品名稱改為RocketMQ

RocketMQ是阿裏review  kafka的java版,如果 消息性能要求高  用rocketmq與kafka可以更優

 

 

總結:

1、性能小 量小 用什麼都沒有關係,性質是一樣的,如果 消息性能要求高  用rocketmq與kafka可以更優,rocketmq與kafka 比較就看技術選型了,各有利弊,看業務需要。

2、activemq rabbitmq 與 kafka、rocketmq有很大的區別就是前2個隻支持主從模式,後2個是分布式消息係統,支持分布式。

3、持久化消息比較: zeroMq不支持,activeMq和rabbitMq都支持。

     持久化消息主要是指:MQ down或者MQ所在的服務器down了,消息不會丟失的機製。

4、其中包括持久化消息和瞬時消息的測試。注意這篇文章裏麵提到的MQ,都是采用默認配置的,並無調優。
     ZeroMq 最好,RabbitMq 次之, ActiveMq 最差。這個結論來自於以下這兩篇文章。

https://blog.x-aeon.com/2013/04/10/a-quick-message-queue-benchmark-activemq-rabbitmq-hornetq-qpid-apollo/
其中包括持久化消息和瞬時消息的測試。注意這篇文章裏麵提到的MQ,都是采用默認配置的,並無調優。

https://www.cnblogs.com/amityat/archive/2011/08/31/2160293.html
顯示的是發送和接受的每秒鍾的消息數。整個過程共產生1百萬條1K的消息。測試的執行是在一個Windows Vista上進行的。

5、技術點:可靠性、靈活的路由、集群、事務、高可用的隊列、消息排序、問題追蹤、可視化管理工具、插件係統、社區

      RabbitMq最好,ActiveMq次之,ZeroMq最差。當然ZeroMq也可以做到,不過自己必須手動寫代碼實現,代碼量不小。尤其是可靠性中的:持久性、投遞確認、發布者證實和高可用性。

      所以在可靠性和可用性上,RabbitMQ是首選,雖然ActiveMQ也具備,但是它性能不及RabbitMQ。

6、高並發

從實現語言來看,RabbitMQ最高,原因是它的實現語言是天生具備高並發高可用的erlang語言。

小結:

按照目前網絡上的資料,RabbitMQ、activeM、zeroMQ三者中,綜合來看,RabbitMQ是首選。下麵提供一篇文章,是淘寶使用RabbitMQ的心得,可以參看一些業務場景。

https://www.docin.com/p-462677246.html

7、kafka和RabbitMQ的比較
關於這兩種MQ的比較,網上的資料並不多,最權威的的是kafka的提交者寫一篇文章。https://www.quora.com/What-are-the-differences-between-Apache-Kafka-and-RabbitMQ

裏麵提到的要點:

1、  RabbitMq比kafka成熟,在可用性上,穩定性上,可靠性上,RabbitMq超過kafka

2、  Kafka設計的初衷就是處理日誌的,可以看做是一個日誌係統,針對性很強,所以它並沒有具備一個成熟MQ應該具備的特性

3、  Kafka的性能(吞吐量、tps)比RabbitMq要強,這篇文章的作者認為,兩者在這方麵沒有可比性。

這裏在附上兩篇文章,也是關於kafka和RabbitMq之間的比較的:

1、https://www.mrhaoting.com/?p=139

2、https://www.liaoqiqi.com/post/227

總結:

兩者對比後,我仍然是選擇RabbitMq,性能其實是很強勁的,同時具備了一個成熟的MQ應該具有的特性,我們無需重新發明輪子。


好資料推薦:

            1、最全最給力的kafka博客:https://blog.csdn.net/lizhitao/article/category/2194509

           2、淘寶對rabbitmq的使用:https://www.docin.com/p-462677246.html

 

 

 

最後更新:2017-09-25 16:04:32

  上一篇:go  【視頻點播】阿裏雲視頻點播如何獲取視頻播放的URL
  下一篇:go  58???????????????30???????????????-??????-????????????-?????????