Kafka Leader的選舉機制

2021-09-12 04:25:21 字數 1516 閱讀 5567

[size=large][color=red][b]kafka的leader是什麼[/b][/color][/size]

首先kafka會將接收到的訊息分割槽(partition),[b]每個主題(topic)的訊息有不同的分割槽。[/b]這樣一方面訊息的儲存就不會受到單一伺服器儲存空間大小的限制,另一方面訊息的處理也可以在多個伺服器上並行。

其次為了保證高可用,[color=red][b]每個分割槽都會有一定數量的副本(replica)。[/b][/color]這樣如果有部分伺服器不可用,副本所在的伺服器就會接替上來,保證應用的持續性。

[img]

但是,為了保證較高的處理效率,訊息的讀寫都是在固定的乙個副本上完成。[size=medium][color=red][b]這個副本就是所謂的leader,而其他副本則是follower。[/b][/color][/size]而follower則會定期地到leader上同步資料。

[size=large][color=red][b]leader選舉[/b][/color][/size]

如果某個分割槽所在的伺服器除了問題,不可用,kafka會從該分割槽的其他的副本中選擇乙個作為新的leader。之後所有的讀寫就會轉移到這個新的leader上。現在的問題是應當選擇哪個作為新的leader。[color=blue][size=medium][b]顯然,只有那些跟leader保持同步的follower才應該被選作新的leader。[/b][/size][/color]

kafka會在zookeeper上針對每個topic維護乙個稱為isr(in-sync replica,已同步的副本)的集合,該集合中是一些分割槽的副本。只有當這些副本都跟leader中的副本同步了之後,kafka才會認為訊息已提交,並反饋給訊息的生產者。如果這個集合有增減,kafka會更新zookeeper上的記錄。

[color=red][b]如果某個分割槽的leader不可用,kafka就會從isr集合中選擇乙個副本作為新的leader。[/b][/color]

顯然通過isr,kafka需要的冗餘度較低,可以容忍的失敗數比較高。假設某個topic有f+1個副本,kafka可以容忍f個伺服器不可用。

[size=large][color=red][b]為什麼不用少數服從多數的方法[/b][/color][/size]

少數服從多數是一種比較常見的一致性演算法和leader選舉法。它的含義是只有超過半數的副本同步了,系統才會認為資料已同步;選擇leader時也是從超過半數的同步的副本中選擇。這種演算法需要較高的冗餘度。譬如只允許一台機器失敗,需要有三個副本;而如果只容忍兩台機器失敗,則需要五個副本。[b]而kafka的isr集合方法,分別只需要兩個和三個副本。[/b]

[size=large][color=red][b]如果所有的isr副本都失敗了怎麼辦[/b][/color][/size]

此時有兩種方法可選,一種是等待isr集合中的副本復活,一種是選擇任何乙個立即可用的副本,而這個副本不一定是在isr集合中。[b]這兩種方法各有利弊,實際生產中按需選擇。

如果要等待isr副本復活,雖然可以保證一致性,但可能需要很長時間。而如果選擇立即可用的副本,則很可能該副本並不一致。[/b]

美國23個州的選舉計票機存在漏洞

安全研究人員發現,美國23個州使用的計票機中存在長達11年未修補的安全漏洞,使得計票機器容易受到黑客攻擊。m650高速選票掃瞄器是由美國領先的選舉裝置 商 election systems software 後文簡稱es s 製造,乙份技術報告指出,該漏洞是投票裝置中最嚴重的漏洞。芝加哥大學 uni...

zookeeper的集群選舉

集群選舉型別 全新集群選舉與非全新集群選舉。全新集群選舉 假設現在有5臺伺服器均沒有資料,它們的編號分別是1,2,3,4,5,按編號依次啟動。過程如下 1.伺服器 1 啟動,給自己投票,然後發投票資訊給其他伺服器,由於其他伺服器沒有啟動,所以它收不到反饋資訊,但是由於投票還沒有到達半數 伺服器 1 ...

Kafka的選舉機制

kafka架構裡有生產者,消費者和broker,第乙個啟動的broker會去zookeeper裡註冊,成為leader,而後面去zookeeper註冊的broker則會收到異常,只能註冊watch物件,對leader進行監控,如果leader broker掛了,其他第乙個註冊的broker成為新的l...