1. 程式人生 > >訊息中介軟體kafka與activeMQ、rabbitMQ、zeroMQ、rocketMQ的比較

訊息中介軟體kafka與activeMQ、rabbitMQ、zeroMQ、rocketMQ的比較

一、kafka

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

2、一般做大資料吞吐的管道 我們現在的用途就是負責在各個idc之間通訊

3、量大對資料不是百分之百保證的,會有資料丟失,不是百分百送達(amq和rmq等有重發機制,而kafka沒有);在吞吐量有提升 ,在這方面就得有犧牲, 所以kafka適合大資料量流轉, 比如日誌資料 比如用作統計的資料。

二、activeMQ

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

 

三、rabbitMQ

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

 

四、zeroMQ

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

 

五、rocketMQ(阿里官方指定訊息中介軟體)

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

具有以下特點:      

能夠保證嚴格的訊息順序       

提供豐富的訊息拉取模式      

高效的訂閱者水平擴充套件能力      

實時的訊息訂閱機制      

億級訊息堆積能力

 

總結

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

2、activeMQ、rabbitMQ與 kafka、rocketMQ有很大的區別就是前2個只支援主從模式,後2個是分散式訊息系統,支援分散式。

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

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

4、高併發

從實現語言來看,RabbitMQ最高,原因是它的實現語言是天生具備高併發高可用的erlang語言。RabbitMQ、activeM、zeroMQ三者中,綜合來看,RabbitMQ是首選。下面提供一篇文章,是淘寶使用RabbitMQ的心得,可以參看一些業務場景。

7、kafka和RabbitMQ的比較

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

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

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

 3-卡夫卡的效能(吞吐量,TPS)比RabbitMQ的要強,這篇文章的作者認為,兩者在這方面沒有可比性。