本篇內(nèi)容介紹了“Kafka中Controller的作用是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)于2013年創(chuàng)立,先為邢臺(tái)縣等服務(wù)建站,邢臺(tái)縣等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為邢臺(tái)縣企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
Kafka除了狀態(tài)管理以外,還主要有以下功能職責(zé):
更新集群元數(shù)據(jù)信息
創(chuàng)建Topic
刪除Topic
分區(qū)重分配
preferred leader副本選舉
Topic分區(qū)擴(kuò)展
Broker加入集群
Broker崩潰
受控關(guān)閉
controller leader選舉
Client可以從任何一臺(tái)broker上獲取集群完整的元數(shù)據(jù)信息,這就需要controller在集群元數(shù)據(jù)信息發(fā)生變更后通知每一個(gè)broker。當(dāng)有分區(qū)信息變更時(shí),controller會(huì)將變更后的信息封裝進(jìn)UpdateMetadataRequest請(qǐng)求中,然后發(fā)送給集群中的每個(gè)Broker。
Controller啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè)Zookeeper監(jiān)聽器,該監(jiān)聽器的作用是監(jiān)聽/brokers/topics下子節(jié)點(diǎn)的變化情況。
Topic在創(chuàng)建時(shí)首先會(huì)在/brokers/topics節(jié)點(diǎn)下面創(chuàng)建一個(gè)子節(jié)點(diǎn)(znode),并且將該Topic的分區(qū)和副本情況寫入這個(gè)znode中。當(dāng)監(jiān)聽器發(fā)現(xiàn)/brokers/topics有新增znode時(shí),就會(huì)立即觸發(fā)controller創(chuàng)建Topic(為新的Topic每個(gè)分區(qū)確定Leader和ISR),然后更新集群元數(shù)據(jù)信息。
當(dāng)創(chuàng)建完成以后,controller會(huì)創(chuàng)建一個(gè)新的監(jiān)聽器/brokers/topics/{topic_name},監(jiān)聽新的Topic內(nèi)容的變更。這樣當(dāng)Topic分區(qū)發(fā)生變化時(shí),controller能夠及時(shí)收到通知。
Kafka集群刪除Topic都是向Zookeeper下的/admin/deletetopics下新增一個(gè)子節(jié)點(diǎn)(znode)。controller在啟動(dòng)時(shí)會(huì)在/admin/deletetopics創(chuàng)建一個(gè)監(jiān)聽器監(jiān)聽該節(jié)點(diǎn)的子節(jié)點(diǎn)是否發(fā)生變更。當(dāng)有新的子節(jié)點(diǎn)被創(chuàng)建時(shí),controller立即開啟刪除Topic刪除邏輯。主要執(zhí)行兩步:
停止該Topic的所有副本
刪除副本日志數(shù)據(jù)
controller移除/admin/delete_topics/{待刪除topic節(jié)點(diǎn)},topic刪除完成
分區(qū)重分配主要為了對(duì)Topic下面的所有分區(qū)重新分配副本所在的broker機(jī)器,以期望實(shí)現(xiàn)更均勻的分配。該操作需要管理員手動(dòng)定制分配方案,并按照指定格式寫入Zookeeper的/admin/reassign_partitions下。
分區(qū)重分配的過程是先擴(kuò)展再收縮的過程。controller首先將分區(qū)副本進(jìn)行擴(kuò)展,等他們?nèi)颗cLeader副本同步以后將Leader設(shè)置為新分配方案中的副本,最后執(zhí)行收縮,將分區(qū)副本減少為分配方案中的副本集合。
為了避免分區(qū)副本分配不均勻,引入preferred副本的概念,假設(shè)一個(gè)分區(qū)副本的列表是[1,2,3],那么broker1就是該分區(qū)的preferred leader。但是隨著時(shí)間的推進(jìn),分區(qū)leader發(fā)生變化,最后preferred leader不一定就是分區(qū)leader。
broker段參數(shù)auto.leader.reblance.enable設(shè)置true,controller會(huì)定時(shí)自動(dòng)調(diào)整preferred leader
通過kafka-preferred-replica-election腳本觸發(fā)
上面兩種方法都會(huì)往Zookeeper的/admin/preferredreplicaelection節(jié)點(diǎn)寫入數(shù)據(jù)。controller也會(huì)注冊(cè)該節(jié)點(diǎn)的目錄監(jiān)聽器。一旦接收到改變通知,controller會(huì)將對(duì)應(yīng)分區(qū)的leader調(diào)整回副本列表中的第一個(gè),并且廣播出去。
當(dāng)前增加分區(qū)通常通過kafka-topics.sh的--alert選項(xiàng),它會(huì)向Zookeeper下的/brokers/topics/{待修改的Topic}中寫入新的分區(qū)目錄。
由于在創(chuàng)建Topic以后,會(huì)注冊(cè)一個(gè)監(jiān)聽該目錄變化監(jiān)聽器,因此當(dāng)目錄發(fā)生變化時(shí),controller會(huì)收到通知,執(zhí)行分區(qū)創(chuàng)建任務(wù),之后更新集群元數(shù)據(jù)信息。
每個(gè)broker創(chuàng)建成功后,都會(huì)在Zookeeper的/brokers/ids節(jié)點(diǎn)下創(chuàng)建一個(gè)子節(jié)點(diǎn),并寫入broker的信息。controller會(huì)在/brokers/ids創(chuàng)建一個(gè)監(jiān)聽該節(jié)點(diǎn)的子節(jié)點(diǎn)是否發(fā)生變化的監(jiān)聽器,一旦收到通知,然后就會(huì)更新集群元數(shù)據(jù)信息。
broker在加入集群時(shí)注冊(cè)的節(jié)點(diǎn)是個(gè)臨時(shí)節(jié)點(diǎn),伴隨broker的崩潰,臨時(shí)節(jié)點(diǎn)消失,然后controller會(huì)收到通知,開啟關(guān)閉broker邏輯,并更新集群元數(shù)據(jù)信息。
受控關(guān)閉是指的以kafka-server-stop.sh或者kill -15的方式關(guān)閉kafka broker。
受控關(guān)閉是由即將關(guān)閉的broker向controller發(fā)送ControlledShutdownRequest。當(dāng)發(fā)送完請(qǐng)求后,broker處于阻塞狀態(tài),controller會(huì)進(jìn)行l(wèi)eader重選舉和ISR收縮調(diào)整后,會(huì)給broker發(fā)送ControlledShutdownResoponse,表示broker可以關(guān)閉。
當(dāng)所有broker一起啟動(dòng)時(shí),會(huì)爭(zhēng)先在Zookeeper上創(chuàng)建/controller臨時(shí)節(jié)點(diǎn),并寫入controller broker的信息,Zookeeper可以保證只有一個(gè)broker可以創(chuàng)建成功,創(chuàng)建成功的broker節(jié)點(diǎn)還會(huì)更新/controller_epoch的值。沒有創(chuàng)建成功的broker監(jiān)聽/controller,加入controller宕機(jī),其他broker將會(huì)收到通知,然后去競(jìng)選controller。
controller啟動(dòng)時(shí)會(huì)與集群中的所有broker(包括controller在的broker)建立TCP連接,并且會(huì)為每個(gè)TCP連接建立一個(gè)RequestSendThread,也就是說controller會(huì)和每個(gè)broker建立一個(gè)TCP連接,并且開啟一個(gè)I/O線程。
controller目前主要有以下三種請(qǐng)求:
UpdateMetaRequest:更新集群元數(shù)據(jù)請(qǐng)求,包含了集群的元數(shù)據(jù)信息。broker接收到該請(qǐng)求后,會(huì)更新本地的緩存信息
LeaderAndIsrRequest:用于創(chuàng)建分區(qū)和副本
StopReplicaRequest:停止指定副本的數(shù)據(jù)請(qǐng)求操作,另外還負(fù)責(zé)刪除副本數(shù)據(jù)功能。
“Kafka中Controller的作用是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
網(wǎng)頁題目:Kafka中Controller的作用是什么
標(biāo)題URL:http://www.chinadenli.net/article8/iigpop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、虛擬主機(jī)、網(wǎng)頁設(shè)計(jì)公司、服務(wù)器托管、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)