日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
還不懂分布系統(tǒng),速看KafkaController選舉過程

上篇文章講了Kafka架構(gòu),詳細(xì)介紹了Kafka中不同組件之間是怎樣協(xié)調(diào)工作的。了解到Kafka集群包含多個Broker節(jié)點,但是這些Broker節(jié)點的具體作用是什么?是怎么進(jìn)行通信的?某個Broker節(jié)點掛了之后,Kafka集群是怎么進(jìn)行故障轉(zhuǎn)移,保持高可用的?今天一塊帶大家一塊學(xué)習(xí)一下。

十載的高邑網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整高邑建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“高邑網(wǎng)站設(shè)計”,“高邑網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。

1. Kafka Broker的作用

Apache Kafka的Broker節(jié)點是Kafka系統(tǒng)的基本組成部分,它們主要負(fù)責(zé)數(shù)據(jù)的存儲和傳輸。Kafka的所有數(shù)據(jù)都存儲在Broker節(jié)點中,同時它們還負(fù)責(zé)處理客戶端的讀寫請求,以及在Broker節(jié)點之間復(fù)制數(shù)據(jù)以確保數(shù)據(jù)的可靠性和高可用性。

一個Broker節(jié)點相當(dāng)于一臺機(jī)器,多個Broker節(jié)點組成一個Kafka集群。但是只有Broker節(jié)點可以充當(dāng)Controller(控制器)節(jié)點,Controller節(jié)點直接與zookeeper進(jìn)行通信,并負(fù)責(zé)管理整個集群的狀態(tài)和元數(shù)據(jù)信息。

以下是Controller節(jié)點的主要職能:

  1. Broker狀態(tài)管理:Controller會跟蹤集群中所有Broker的在線狀態(tài),并在Broker宕機(jī)或者恢復(fù)時更新集群的狀態(tài)。
  2. 分區(qū)狀態(tài)管理:當(dāng)新的Topic被創(chuàng)建,或者已有的Topic被刪除時,Controller會負(fù)責(zé)管理這些變化,并更新集群的狀態(tài)。
  3. 分區(qū)領(lǐng)導(dǎo)者選舉:當(dāng)一臺Broker節(jié)點宕機(jī)時,并且宕機(jī)的機(jī)器上包含分區(qū)領(lǐng)導(dǎo)者副本時,Controller會負(fù)責(zé)對其上的所有Partition進(jìn)行新的領(lǐng)導(dǎo)者選舉。
  4. 副本狀態(tài)管理:Controller負(fù)責(zé)管理Partition的ISR列表,當(dāng)Follower副本無法及時跟隨Leader副本時,Controller會將其從ISR列表中移除。
  5. 分區(qū)重平衡:當(dāng)添加或刪除Broker節(jié)點時,Controller會負(fù)責(zé)對Partition的分布進(jìn)行重平衡,以確保數(shù)據(jù)的均勻分布。
  6. 存儲集群元數(shù)據(jù):Controller保存了集群中最全的元數(shù)據(jù)信息,并通過發(fā)送請求同步到其他Broker上面。

而非Controller節(jié)點的主要作用如下:

  1. 數(shù)據(jù)存儲:每個非Controller節(jié)點都存儲一部分?jǐn)?shù)據(jù),這部分?jǐn)?shù)據(jù)是由Topic的Partition組成的。這意味著,每個Broker都保存了特定Partition的所有數(shù)據(jù),不論這個Partition是Leader還是Follower。
  2. 數(shù)據(jù)復(fù)制:為了保證數(shù)據(jù)的可靠性,Kafka系統(tǒng)通過數(shù)據(jù)復(fù)制機(jī)制在多個Broker之間備份數(shù)據(jù)。每個Topic的Partition都有一個Leader和多個Follower。Leader負(fù)責(zé)處理所有的客戶端讀寫請求,而Follower負(fù)責(zé)從Leader復(fù)制數(shù)據(jù)。在這個過程中,非Controller節(jié)點既可以是Leader也可以是Follower。
  3. 處理客戶端請求:非Controller節(jié)點負(fù)責(zé)處理來自Producer和Consumer的請求。對于Producer的寫請求,Broker會將數(shù)據(jù)寫入對應(yīng)的Partition。對于Consumer的讀請求,Broker會從對應(yīng)的Partition讀取數(shù)據(jù)。
  4. 參與Leader選舉:當(dāng)Partition的Leader節(jié)點出現(xiàn)故障時,非Controller節(jié)點可能被選舉為新的Leader節(jié)點。雖然Leader選舉過程由Controller節(jié)點協(xié)調(diào),但所有的非Controller節(jié)點都需要參與這個過程。
  5. 故障恢復(fù):當(dāng)某個Broker宕機(jī)時,Kafka會自動重新分配其上的Partition的Leader角色給其他的Broker,這也是非Controller節(jié)點的重要職責(zé)之一。

2. Controller節(jié)點初始化

Kafka Controller節(jié)點的初始化依賴Zookeeper實現(xiàn),具體流程如下:

  1. 注冊 Controller 節(jié)點當(dāng) Kafka 集群啟動時,每個 Broker 都會嘗試在 Zookeeper 中的 /controller 路徑下創(chuàng)建一個臨時節(jié)點。因為同一時刻只能存在一個 /controller 節(jié)點,所以只有一個 Broker 成功創(chuàng)建節(jié)點并成為Controller。其他 Broker 會收到節(jié)點創(chuàng)建失敗的通知,然后轉(zhuǎn)為觀察者(Observer)狀態(tài),監(jiān)視Controller節(jié)點路徑的變化。
  2. 監(jiān)聽 Controller 節(jié)點所有非Controller的 Broker 都會在 Zookeeper 中對 /controller 路徑設(shè)置一個 Watcher 事件。這樣當(dāng)Controller節(jié)點發(fā)生變化時(例如,Controller失效),所有非Controller就會收到一個 Watcher 事件。
  3. 選舉新的Controller當(dāng)某個 Broker 接收到Controller節(jié)點變化的通知后,它會再次嘗試在 Zookeeper 中的 /controller 路徑下創(chuàng)建一個臨時節(jié)點。與啟動時的過程類似,只有一個 Broker 能夠成功創(chuàng)建節(jié)點并成為新的Controller。新Controller會在選舉成功后接管集群元數(shù)據(jù)的管理工作。
  4. 更新集群元數(shù)據(jù)新Controller在選舉成功后需要更新集群元數(shù)據(jù),包括分區(qū)狀態(tài)、副本狀態(tài)等。同時,新控制器會通知所有相關(guān)的 Broker 更新它們的元數(shù)據(jù)信息。這樣,集群中的所有 Broker 都能夠知道新Controller的身份,并進(jìn)行協(xié)同工作。

注意:臨時節(jié)點的特點是在創(chuàng)建它的客戶端(即 Broker節(jié)點)斷開連接時,它會自動被 Zookeeper 刪除。這種機(jī)制保證了只有一個Broker節(jié)點能夠成為控制器,以避免多個控制器同時對集群元數(shù)據(jù)進(jìn)行操作引發(fā)的問題。

3. Kafka腦裂問題

腦裂問題是分布式系統(tǒng)中經(jīng)常出現(xiàn)的現(xiàn)象,Kafka腦列問題是由于網(wǎng)絡(luò)或其他原因?qū)е露鄠€Broker認(rèn)為自己是Controller,從而導(dǎo)致元數(shù)據(jù)不一致和分區(qū)狀態(tài)混亂的問題。

Kafka是通過epoch number(紀(jì)元編號)來解決腦裂問題,epoch number是一個單調(diào)遞增的版本號。

腦裂問題產(chǎn)生和處理過程如下:

  • 假設(shè)有三個Broker,分別是Broker 0,Broker 1和Broker 2。Broker 0是Controller,它在ZooKeeper中創(chuàng)建了/controller節(jié)點,并設(shè)置epoch number值為1。Broker 1和Broker 2在/controller節(jié)點設(shè)置了Watcher。
  • 由于某種原因,Broker 0出現(xiàn)了Full GC,導(dǎo)致它與ZooKeeper的會話超時。ZooKeeper刪除了/controller節(jié)點,并通知Broker 1和Broker 2進(jìn)行新的Controller選舉。
  • Broker 1和Broker 2同時嘗試在ZooKeeper中創(chuàng)建/controller節(jié)點,假設(shè)Broker 1成功了,那么它就成為了新的Controller,設(shè)置epoch number值為2,并向Broker 2同步數(shù)據(jù)。
  • Broker 0的Full GC結(jié)束后,繼續(xù)向Broker 1和Broker 2同步數(shù)據(jù),Broker 1和Broker 2接收到數(shù)據(jù)后,發(fā)現(xiàn)epoch number小于當(dāng)前值,就會拒絕這些消息。并通知Broker 0最新的epoch number,然后Broker 0發(fā)現(xiàn)自己已經(jīng)不是Controller了,最后與新的Controller建立連接。

4. 總結(jié)

本文詳細(xì)介紹了Kafka Controller的作用和故障轉(zhuǎn)移過程,以及Kafka是怎么解決腦裂問題的。


分享名稱:還不懂分布系統(tǒng),速看KafkaController選舉過程
網(wǎng)頁網(wǎng)址:http://www.dlmjj.cn/article/djhiopp.html