1. 程式人生 > >RabbitMQ和Kafka對比以及場景使用說明

RabbitMQ和Kafka對比以及場景使用說明

1.架構模型

    rabbitmq

    RabbitMQ遵循AMQP協議,RabbitMQ的broker由Exchange,Binding,queue組成,其中exchange和binding組成了訊息的路由鍵;客戶端Producer通過連線channel和server進行通訊,Consumer從queue獲取訊息進行消費(長連線,queue有訊息會推送到consumer端,consumer迴圈從輸入流讀取資料)。rabbitMQ以broker為中心;

    Kafka

    kafka遵從一般的MQ結構,producer,broker,consumer,以consumer為中心,訊息的消費資訊儲存的客戶端consumer上,consumer根據消費的點,從broker上批量pull資料

     2.訊息確認機制

    rabbitmq

    具有生產者confirm機制以及消費者的訊息應答機制ack。

    Kafka

    不具有應答機制。

    3.訊息的順序

    rabbitmq

    在一個佇列裡面,rabbitmq的訊息是嚴格順序的,按照先進先出。

    kafka

    在同一個partition中訊息是有序的,但是生產者put到Kafka中資料會分佈在不同的partition中,所有總體是無序的。

    4.吞吐量

    rabbitmq

    根據測試,RabbitMQ在不使用ACK機制的,Msg大小為1K的情況下,QPS可達6W+。再雙方ACK機制,Msg大小為1K的情況下,QPS瞬間降到了1W+。

    Kafka

    Kafka具有巨大的吞吐量,資料的儲存以及獲取是本地磁碟的批量處理,可以達到百萬/s。

    5.可靠性

    rabbitmq

    RabbitMQ使用了MirrorQueue的機制,也可以做到多個機器進行熱備。

     Kafka

    Kafka的broker支援主備模式。

    7.持久化

    rabbitmq

    支援

    kafka

    Kafka 是一個永續性訊息儲存。

    對於他們的使用場景如下

    rabbitmq       

1.RabbitMQ的訊息應當儘可能的小,並且只用來處理實時且要高可靠性的訊息。

2.消費者和生產者的能力盡量對等,否則訊息堆積會嚴重影響RabbitMQ的效能。

3.叢集部署,使用熱備,保證訊息的可靠性。

    kafka

1.應當有一個非常好的運維監控系統,不單單要監控Kafka本身,還要監控Zookeeper。(kafka強烈的依賴於zookeeper,如果zookeeper掛掉了,那麼Kafka也不行了)

2.對訊息順序不依賴,且不是那麼實時的系統。

3.對訊息丟失並不那麼敏感的系統。

4.從 A 到 B 的流傳輸,無需複雜的路由,最大吞吐量可達每秒 100k 以上。