rabbit和kafka的優劣點(個人記憶)

核心點:數據結構的差異

  • rabbit 是隊列 
  •   
  •  
  • kafka 的數據存儲是一種追加模式的事物日誌

順序性、消息留存:

    rabbit無法保證broker存儲數據的有序性,隊列是先入先出,消費者消費了,數據就出對了,這個數據就被刪除。  假如多個消費者消費同一隊列時,某一消費者消費失敗,數據回退到隊列了,但其他消費者卻已經消費成功了。這個時候順序就亂了,針對順序性要求高的業務就不支持了。

    因爲有一個特性:消費者1消費某條數據時,不會阻礙其他消費者消費後面的數據

kafka:針對topic分區保證順序性,因爲其數據不會丟失(除非超時),Kafka 僅僅把它當做消息日誌來看待,並不關心消費者的消費狀態。消費者可以不限次數的消費每條消息,並且他們可以操作分區偏移來“及時”往返的處理這些消息。

容錯性:重試

RabbitMQ 可以配置重試次數。

在 RabbitMQ 中我們需要記住最重要的事情是當一個消費者正在處理或者重試某個消息時(即使是在把它返回隊列之前),其他消費者都可以併發的處理這個消息之後的其他消息。

當某個消費者在重試處理某條消息時,作爲一個整體的消息處理邏輯不會被阻塞。

和 RabbitMQ 相反,Kafka 沒有提供這種開箱即用的機制。在 Kafka 中,需要我們自己在應用層提供和實現消息重試機制。

我們需要注意的是當一個消費者正在同步地處理一個特定的消息時,那麼同在這個分區上的其他消息是沒法被處理的。

由於消費者不能改變消息的順序,所以我們不能夠拒絕和重試一個特定的消息以及提交一個在這個消息之後的消息。你只要記住,分區僅僅是一個追加模式的日誌。

即:如果消費者阻塞在重試一個消息上,那麼底部分區的消息就不會被處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章