1、吞吐量
kafka吞吐量更高:
1)zero copy機制,核心copy資料直接copy到網路裝置,不必經過核心到使用者再到核心的copy,減小了copy次數和上下文切換次數,大大提高了效率。
2)磁碟順序讀寫,減少了尋道等待的時間。
3)批量處理機制,服務端批量儲存,客戶端主動批量pull資料,訊息處理效率高。
4)儲存具有o(1)的複雜度,讀物因為分割槽和segment,是o(log(n))的複雜度。
5)分割槽機制,有助於提高吞吐量。
2、可靠性
rabbitmq可靠性更好:
1)確認機制(生產者和exchange,消費者和佇列);
2)支援事務,但會造成阻塞;
3)委託(新增**來處理傳送失敗的訊息)和備份交換器(將傳送失敗的訊息存下來後面再處理)機制;
3、高可用
1)rabbitmq採用mirror queue,即主從模式,資料是非同步同步的,當訊息過來,主從全部寫完後,回ack,這樣保障了資料的一致性。
2)每個分割槽都可以有乙個或多個副本,這些副本儲存在不同的broker上,broker資訊儲存在zookeeper上,當broker不可用會重新選舉leader。
kafka支援同步負責訊息和非同步同步訊息(有丟訊息的可能),生產者從zk獲取leader資訊,發訊息給leader,follower從leader pull資料然後回ack給leader。
4、負責均衡
1)kafka通過zk和分割槽機制實現:zk記錄broker資訊,生產者可以獲取到並通過策略完成負載均衡;通過分割槽,投遞訊息到不同分割槽,消費者通過服務組完成均衡消費。
2)需要外部支援。
5、模型
1)rabbitmq:
producer,broker遵循amqp(exchange,bind,queue),consumer;
broker為中心,exchange分topic,direct,fanout和header,路由模式適合多種場景;
consumer消費位置由broker通過確認機制儲存;
2)kafka:
producer,broker,consumer,未遵循amqp;
consumer為中心,獲取訊息模式由consumer自己決定;
offset儲存在消費者這邊,broker無狀態;
訊息是名義上的永久儲存,每個parttition按segment儲存自己的訊息為檔案(可配置清理週期);
consumer可以通過重置offset消費歷史訊息;
需要繫結zk;
RabbitMQ和kafka的區別
rabbitmq遵循amqp協議,rabbitmq的broker由exchange,binding,queue組成,其中exchange和binding組成了訊息的路由鍵 客戶端producer通過連線channel和server進行通訊,consumer從queue獲取訊息進行消費 長連線,que...
RabbitMQ和kafka的區別
一 語言不同 rabbitmq是由內在高併發的erlanng語言開發,用在實時的對可靠性要求比較高的訊息傳遞上。kafka是採用scala語言開發,它主要用於處理活躍的流式資料,大資料量的資料處理上 二 結構不同 rabbitmq採用amqp advanced message queuing pro...
kafka和RabbitMQ的區別
1.應用場景方面 rabbitmq 用於實時的,對可靠性要求較高的訊息傳遞上。kafka 用於處於活躍的流式資料,大資料量的資料處理上。2.語言方面 rabbitmq是由內在高併發的erlanng語言開發,用在實時的對可靠性要求比較高的訊息傳遞上。kafka是採用scala語言開發,它主要用於處理活...