副本的leader选举
Kafka提供了數(shù)據(jù)復(fù)制算法保證,如果leader副本所在的broker節(jié)點(diǎn)宕機(jī)或者出現(xiàn)故障,或者分區(qū)的leader節(jié)點(diǎn)發(fā)生故障,這個時候怎么處理呢?
那么,kafka必須要保證從follower副本中選擇一個新的leader副本。那么kafka是如何實(shí)現(xiàn)選舉的呢?要了解leader選舉,我們需要了解幾個概念
Kafka分區(qū)下有可能有很多個副本(replica)用于實(shí)現(xiàn)冗余,從而進(jìn)一步實(shí)現(xiàn)高可用。副本根據(jù)角色的不同可分為3類:
leader副本:響應(yīng)clients端讀寫請求的副本
follower副本:被動地備份leader副本中的數(shù)據(jù),不能響應(yīng)clients端讀寫請求。
ISR副本:包含了leader副本和所有與leader副本保持同步的follower副本——如何判定是否與leader同步后面會提到每個Kafka副本對象都有兩個重要的屬性:LEO和HW。注意是所有的副本,而不只是leader副本。
LEO:即日志末端位移(log end offset),記錄了該副本底層日志(log)中下一條消息的位移值。注意是下一條消息!也就是說,如果LEO=10,那么表示該副本保存了10條消息,位移值范圍是[0, 9]。另外,leader LEO和follower LEO的更新是有區(qū)別的。我們后面會詳細(xì)說
HW:即上面提到的水位值。對于同一個副本對象而言,其HW值不會大于LEO值。小于等于HW值的所有消息都被認(rèn)為是“已備份”的(replicated)。同理,leader副本和follower副本的HW更新是有區(qū)別的
從生產(chǎn)者發(fā)出的 一 條消息首先會被寫入分區(qū)的leader 副本,不過還需要等待ISR集合中的所有follower副本都同步完之后才能被認(rèn)為已經(jīng)提交,之后才會更新分區(qū)的HW, 進(jìn)而消費(fèi)者可以消費(fèi)到這條消息。
?
總結(jié)
以上是生活随笔為你收集整理的副本的leader选举的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。