我目前的項目最后使用的是RabbitMQ,這里依然是結合網上大神們的優秀博客,對kafka和rabbitmq進行簡單的比對。最后附上參考博客。
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 以上。
