rabbitmq和kafka的區別


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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM