<mark id="crdxo"></mark>
  • <rp id="crdxo"><dfn id="crdxo"><dl id="crdxo"></dl></dfn></rp>

          
          
          溫馨提示×

          溫馨提示×

          您好,登錄后才能下訂單哦!

          密碼登錄×
          登錄注冊×
          其他方式登錄
          點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

          Kafka中Controller的作用是什么

          發(fā)布時間:2021-07-19 09:47:01 來源:億速云 閱讀:707 作者:chen 欄目:大數(shù)據(jù)

          本篇內(nèi)容介紹了“Kafka中Controller的作用是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

          Kafka除了狀態(tài)管理以外,還主要有以下功能職責(zé):

          • 更新集群元數(shù)據(jù)信息

          • 創(chuàng)建Topic

          • 刪除Topic

          • 分區(qū)重分配

          • preferred leader副本選舉

          • Topic分區(qū)擴(kuò)展

          • Broker加入集群

          • Broker崩潰

          • 受控關(guān)閉

          • controller leader選舉

          職責(zé)功能
          更新集群元數(shù)據(jù)信息

          Client可以從任何一臺broker上獲取集群完整的元數(shù)據(jù)信息,這就需要controller在集群元數(shù)據(jù)信息發(fā)生變更后通知每一個broker。當(dāng)有分區(qū)信息變更時,controller會將變更后的信息封裝進(jìn)UpdateMetadataRequest請求中,然后發(fā)送給集群中的每個Broker。

          創(chuàng)建Topic

          Controller啟動時會創(chuàng)建一個Zookeeper監(jiān)聽器,該監(jiān)聽器的作用是監(jiān)聽/brokers/topics下子節(jié)點的變化情況。

          Topic在創(chuàng)建時首先會在/brokers/topics節(jié)點下面創(chuàng)建一個子節(jié)點(znode),并且將該Topic的分區(qū)和副本情況寫入這個znode中。當(dāng)監(jiān)聽器發(fā)現(xiàn)/brokers/topics有新增znode時,就會立即觸發(fā)controller創(chuàng)建Topic(為新的Topic每個分區(qū)確定Leader和ISR),然后更新集群元數(shù)據(jù)信息。

          當(dāng)創(chuàng)建完成以后,controller會創(chuàng)建一個新的監(jiān)聽器/brokers/topics/{topic_name},監(jiān)聽新的Topic內(nèi)容的變更。這樣當(dāng)Topic分區(qū)發(fā)生變化時,controller能夠及時收到通知。Kafka中Controller的作用是什么

          刪除Topic

          Kafka集群刪除Topic都是向Zookeeper下的/admin/deletetopics下新增一個子節(jié)點(znode)。controller在啟動時會在/admin/deletetopics創(chuàng)建一個監(jiān)聽器監(jiān)聽該節(jié)點的子節(jié)點是否發(fā)生變更。當(dāng)有新的子節(jié)點被創(chuàng)建時,controller立即開啟刪除Topic刪除邏輯。主要執(zhí)行兩步:

          1. 停止該Topic的所有副本

          2. 刪除副本日志數(shù)據(jù)

          3. controller移除/admin/delete_topics/{待刪除topic節(jié)點},topic刪除完成

          分區(qū)重分配

          分區(qū)重分配主要為了對Topic下面的所有分區(qū)重新分配副本所在的broker機(jī)器,以期望實現(xiàn)更均勻的分配。該操作需要管理員手動定制分配方案,并按照指定格式寫入Zookeeper的/admin/reassign_partitions下。

          分區(qū)重分配的過程是先擴(kuò)展再收縮的過程。controller首先將分區(qū)副本進(jìn)行擴(kuò)展,等他們?nèi)颗cLeader副本同步以后將Leader設(shè)置為新分配方案中的副本,最后執(zhí)行收縮,將分區(qū)副本減少為分配方案中的副本集合。

          preferred leader選舉

          為了避免分區(qū)副本分配不均勻,引入preferred副本的概念,假設(shè)一個分區(qū)副本的列表是[1,2,3],那么broker1就是該分區(qū)的preferred leader。但是隨著時間的推進(jìn),分區(qū)leader發(fā)生變化,最后preferred leader不一定就是分區(qū)leader。

          1. broker段參數(shù)auto.leader.reblance.enable設(shè)置true,controller會定時自動調(diào)整preferred leader

          2. 通過kafka-preferred-replica-election腳本觸發(fā)

          上面兩種方法都會往Zookeeper的/admin/preferredreplicaelection節(jié)點寫入數(shù)據(jù)。controller也會注冊該節(jié)點的目錄監(jiān)聽器。一旦接收到改變通知,controller會將對應(yīng)分區(qū)的leader調(diào)整回副本列表中的第一個,并且廣播出去。

          Topic分區(qū)擴(kuò)展

          當(dāng)前增加分區(qū)通常通過kafka-topics.sh的--alert選項,它會向Zookeeper下的/brokers/topics/{待修改的Topic}中寫入新的分區(qū)目錄。

          由于在創(chuàng)建Topic以后,會注冊一個監(jiān)聽該目錄變化監(jiān)聽器,因此當(dāng)目錄發(fā)生變化時,controller會收到通知,執(zhí)行分區(qū)創(chuàng)建任務(wù),之后更新集群元數(shù)據(jù)信息。

          broker加入集群

          每個broker創(chuàng)建成功后,都會在Zookeeper的/brokers/ids節(jié)點下創(chuàng)建一個子節(jié)點,并寫入broker的信息。controller會在/brokers/ids創(chuàng)建一個監(jiān)聽該節(jié)點的子節(jié)點是否發(fā)生變化的監(jiān)聽器,一旦收到通知,然后就會更新集群元數(shù)據(jù)信息。

          broker崩潰

          broker在加入集群時注冊的節(jié)點是個臨時節(jié)點,伴隨broker的崩潰,臨時節(jié)點消失,然后controller會收到通知,開啟關(guān)閉broker邏輯,并更新集群元數(shù)據(jù)信息。

          受控關(guān)閉

          受控關(guān)閉是指的以kafka-server-stop.sh或者kill -15的方式關(guān)閉kafka broker。

          受控關(guān)閉是由即將關(guān)閉的broker向controller發(fā)送ControlledShutdownRequest。當(dāng)發(fā)送完請求后,broker處于阻塞狀態(tài),controller會進(jìn)行l(wèi)eader重選舉和ISR收縮調(diào)整后,會給broker發(fā)送ControlledShutdownResoponse,表示broker可以關(guān)閉。

          controller leader選舉

          當(dāng)所有broker一起啟動時,會爭先在Zookeeper上創(chuàng)建/controller臨時節(jié)點,并寫入controller broker的信息,Zookeeper可以保證只有一個broker可以創(chuàng)建成功,創(chuàng)建成功的broker節(jié)點還會更新/controller_epoch的值。沒有創(chuàng)建成功的broker監(jiān)聽/controller,加入controller宕機(jī),其他broker將會收到通知,然后去競選controller。Kafka中Controller的作用是什么Kafka中Controller的作用是什么

          controller與broker通信

          controller啟動時會與集群中的所有broker(包括controller在的broker)建立TCP連接,并且會為每個TCP連接建立一個RequestSendThread,也就是說controller會和每個broker建立一個TCP連接,并且開啟一個I/O線程。

          controller目前主要有以下三種請求:

          • UpdateMetaRequest:更新集群元數(shù)據(jù)請求,包含了集群的元數(shù)據(jù)信息。broker接收到該請求后,會更新本地的緩存信息

          • LeaderAndIsrRequest:用于創(chuàng)建分區(qū)和副本

          • StopReplicaRequest:停止指定副本的數(shù)據(jù)請求操作,另外還負(fù)責(zé)刪除副本數(shù)據(jù)功能。

          “Kafka中Controller的作用是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

          向AI問一下細(xì)節(jié)

          免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

          AI