如何保證kafka的高可用性
阿新 • • 發佈:2022-03-06
Kafka 由多個 broker 組成,每個 broker 是一個機器節點;你建立一個 topic,這個 topic可以劃分為多個 partition,每個 partition 可以存在於不同的 broker 上,每個 partition就放一部分資料。每個 partition 的資料都會同步到其它機器上,形成自己的多個 replica 副本。這就是天然的分散式訊息佇列,就是說一個 topic 的資料,是分散放在多個機器上的,每個機器就放一部分資料。
所有 replica 會選舉一個 leader 出來,那麼生產和消費都跟這個 leader 打交道,然後其他 replica 就是follower。寫的時候,leader 會負責把資料同步到所有 follower 上去,讀的時候就直接讀 leader上的資料即可。一般情況只能讀寫 leader,follower在leader不宕機的情況下只負責同步資料 。
為什麼只能讀寫leader呢?
要是你可以隨意讀寫每個follower,那麼就要關心資料一致性的問題,系統複雜度太高,很容易出問題。Kafka 會均勻地將一個 partition 的所有 replica 分佈在不同的機器上,這樣才可以提高容錯性。
如果某個 broker 宕機了,那個 broker 上面的 partition 在其他機器上都有副本的。如果這個宕機的 broker上面有某個 partition 的 leader,那麼此時會從 follower 中重新選舉一個新的 leader出來,大家繼續讀寫那個新的 leader 即可。這就有所謂的高可用性了。