rabbitmq和kafka的區別

一、吞吐量
kafka吞吐量更高:
  1)Zero Copy機制,內核copy數據直接copy到網絡設備,沒必要通過內核到用戶再到內核的copy,減少了copy次數和上下文切換次數,大大提升了效率。
  2)磁盤順序讀寫,減小了尋道等待的時間。
  3)批量處理機制,服務端批量存儲,客戶端主動批量pull數據,消息處理效率高。
  4)存儲具備O(1)的複雜度,讀物由於分區和segment,是O(log(n))的複雜度。
  5)分區機制,有助於提升吞吐量。

二、可靠性
rabbitmq可靠性更好:
  1)確認機制(生產者和exchange,消費者和隊列);
  2)支持事務,但會形成阻塞;
  3)委託(添加回調來處理髮送失敗的消息)和備份交換器(將發送失敗的消息存下來後面再處理)機制;

三、高可用
  1)rabbitmq採用mirror queue,即主從模式,數據是異步同步的,當消息過來,主從所有寫完後,回ack,這樣保障了數據的一致性。
  2)每一個分區均可以有一個或多個副本,這些副本保存在不一樣的broker上,broker信息存儲在zookeeper上,當broker不可用會從新選舉leader。
  kafka支持同步負責消息和異步同步消息(有丟消息的可能),生產者從zk獲取leader信息,發消息給leader,follower從leader pull數據而後回ack給leader。

四、負責均衡
  1)kafka經過zk和分區機制實現:zk記錄broker信息,生產者能夠獲取到並經過策略完成負載均衡;經過分區,投遞消息到不一樣分區,消費者經過服務組完成均衡消費。
  2)須要外部支持。

五、模型
  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;網絡

相關文章
相關標籤/搜索