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 以上。