RabbitMQ/RocketMQ/Kafka 高可用架構的對比

RabbitMQ

1.普通模式

2.鏡像模式 

RabbitMQ 的高可用有兩種模式,一種是普通模式,另一種是鏡像模式。

普通模式:每個節點同步元數據,即每個節點都擁有一份完整的元數據,而隊列數據只存在某個節點中。

鏡像模式:基於普通模式下,新增鏡像節點。每個鏡像節點擁有和主節點相同的數據,包括隊列數據。(鏡像模式的故障轉移需要依賴第三方插件 比如keepalived),並由主節點提供外部服務。

GM模塊:實現的一種可靠的組播通訊協議,該協議能夠保證組播消息的原子性,即保證組中活着的節點要麼都收到消息要麼都收不到。(參考:http://www.voidcn.com/article/p-khkfmklu-bru.html)

元數據包括:

  (1)隊列元數據,隊列名稱和它們的屬性(是否可持續化,是否自動刪除)

  (2)交換器元數據(交換器名稱,類型,屬性)

  (3)綁定元數據,一張簡單的表格展示瞭如何將消息路由到隊列

  (4)Vhost元數據,爲vhost內的隊列,交換器和綁定提供命名空間和安全屬性

RocketMQ

首先每個Broker都會向ServerName Cluster中註冊,每個ServerName 擁有相同的元數據。同時Broker會與ServerName 保持心跳,以證明自己”活着”。

其次是master之間沒有通信,如果master宕機,且無從節點。那麼該master的數據將無法被消費,直至master恢復。如果該master無法恢復,會導致數據丟失。

RocketMQ主要實現主從模式,由主節點提供外部服務,並且基於Dleger協議(基於Raft)實現Leader選舉和日誌同步。

Kafka

每個Broker都會向Zookeeper 註冊(/brokers/ids),在Broker集羣中,存在存在一個主Controller(Broker),負責管理所有分區及副本狀態。並且當某個分區的ISR變化時,負責通知所有Broker更新元數據。同時負責每個分區的Leader選舉。

主Controller選舉是所有節點向Zookeeper 註冊 /Controller 節點,先到先到,其他節點監控這個節點的變化。

主分區選舉是按照AR集合副本的順序查找第一個存活的副本,並且在ISR集合中。

數據一致協議ISR,全稱是“In-Sync Replicas”,也就是保持同步的副本,他的含義就是,跟Leader始終保持同步的Follower有哪些。Kafka自動維護和監控哪些Follower及時的跟上了Leader的數據同步。

總結

1.RabbitMQ提供普通模式與鏡像模式,不同模式下每個節點都擁有一份完整的元數據,而隊列數據只存在某個節點中。鏡像模式基於不同模式,組成鏡像的節點擁有完整的數據副本。

2.RocketMQ 向ServerName Cluster註冊,以實現對外服務及負載均衡等功能。並通過Dlegder實現master選舉與日誌同步。

3.Kafka 通過Zookeeper實現主Controller選舉及主分區選舉。並通過ISR保持實現數據一致。

參考

1.狸貓技術窩 RocketMQ系列

2.《深入理解Kafka:核心設計與實踐原理》

3.《RabbitMQ實戰》

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