1. 程式人生 > 其它 >如何保證kafka的高可用性

如何保證kafka的高可用性

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 即可。這就有所謂的高可用性了。