精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

萬字長文解析Kafka分區工作機制

開發 架構
分區的狀態主要包括NonExistentPartition、NewPartition、OnlinePartition、OfflinePartition四個狀態,只有分區狀態為OnlinePartition才能對外提供讀與寫。

Kafka的消息發送與消息消費與分區關聯密切,我們從這篇文章開始講點學習分區相關的知識,本篇文章將重點介紹分區內部的工作機制,即分區狀態機運轉機制。

1、Kafka分區狀態

Kafka內部分區的運轉機制具體實現為PartitionStateMachine,從這個類的注釋上來看可以得知Kafka分區的狀態共有四個,它們分別是:

  • NonExistentPartition 表示分區不存在,通常是該分區從未創建過或者創建后被刪除。
  • NewPartition 分區已創建,即分配完成了副本,但還未進行分區Leader選舉,即還不存在Leader分區與ISR集合,前一個有效狀態為NonExistentPartition。
  • OnlinePartition 分區處于在線時的狀態,表示已經完成了分區選舉,成功選舉出Leader,此時可以進行消息發送與消息消費,前一個有效狀態為NewPartition/OfflinePartition。
  • OfflinePartition分區處于離線時狀態,表示選舉出來的Leader失效了,例如Leader所在的Broker宕機,前一個有效狀態為NewPartition/OnlinePartition。

關于分區的狀態變如下所示:

圖片

2、Kafka分區狀態機

接下來本文的行為思路,將會通過源碼閱讀的方式,深入PartitionStateMachine的實現細節,從而提煉出分區變更實現要點,幫助我們更好的運維kafka。

2.1 狀態機啟動流程

狀態機的啟動流程定義在PartitionStateMachine的startup方法,該方法的調用時機:一個新的Broker通過控制器選舉成為新的Controller時會被調用。

該方法的聲明如下:

圖片

狀態機的啟動主要包括兩個步驟:

  • 初始化分區的狀態
  • 觸發分區狀態向OnlinePartition轉換

接下來將詳細探討實現細節。

2.1.1 分區狀態初始化

首先我們來看一下分區的初始化流程,具體代碼如下所示:

圖片

該方法的實現要點:

  • 在KafkaController中使用來ControllerContext用來在內存中存儲與控制器相關的數據結構,其中Map[String, mutable.Map[Int, Seq[Int]]]  partitionReplicaAssignmentUnderlying存儲了當前集群中所有的分區信息(主題名稱、分區編號,副本數情況),既然是控制器重新選舉,故需要重新初始化所有的分區。
  • 然后根據 Map[TopicPartition, LeaderIsrAndControllerEpoch] partitionLeadershipInfo中存儲各個分區當前的運行時狀態,這里分成三種情況:

如果partitionLeadershipInfo中并不存在主題分區的Leaer和ISR信息,驅動狀態從NonExistentPartition轉換為NewPartition。

如果partitionLeadershipInfo中存在主題分區的leader信息,但對應的Broker已經為下線狀態,則驅動狀態從NonExistentPartition轉換為OfflinePartition。

如果partitionLeadershipInfo中存在主題分區的leader信息,但對應的Broker已經為下線狀態,則將狀態從NonExistentPartition先轉換為OfflinePartition。

值得注意的是,調用changeStateTo方法改變分區的狀態,僅僅只是在內存中更新狀態,其具體實現如圖所示:

圖片

具體的做好是將需要更新的狀態存儲到Map[TopicPartition, PartitionState] 中。

2.1.2 分區狀態運轉機制

在內存中根據當前維護的LeaderAndISR信息后將狀態存儲到本地內存后,接下來就是將分區狀態向Online狀態轉換,具體的代碼實現見PartitionStateMachine的triggerOnlinePartitionStateChange方法,代碼如下所示:

圖片

該方法的實現要點是在內存緩存中(Map[TopicPartition, PartitionState] )挑選出狀態處于OfflinePartition與NewPartition并且未被刪除的分區,驅動狀態機,調用handleStateChanges方法嘗試向OnlinePartition分區轉化。

圖片

該方法主要做如下兩件事情:

  • 調用PartitionStateMachine的doHandleStateChanges的方法,驅動分區狀態機的轉換。
  • 然后調用ControllerBrokerRequestBatch的sendRequestsToBrokers方法,實現元信息在其他Broker上的同步

要想清晰而全面的了解分區狀態的變更,我還給出了Kafka中所有調用handleStateChanges的調用入口,在后續深入研究Kafka相關機制時會再次一一提及,調用鏈如下圖所示:

圖片

由于篇幅的問題,分區信息在其他Broker中的狀態同步將在下一篇文章中介紹。

PartitionStateMachine的doHandleStateChanges方法在上一篇中已經詳細介紹,尷尬,在Kafka生產實踐中又出問題了 中詳細介紹過,在這里我稍微總結提煉一下:

目標狀態為NewPartition、OfflinePartition、NonExistentPartition 這三個狀態并沒有什么復雜的實現邏輯,只是更新內存中的狀態,并在state-change.log文件中將輸出狀態變更日志,只有目標狀態為OnlinePartition時才會詳細的處理邏輯。

但或許你有一個疑問,狀態變更為NewPartition,什么時候會向OnlinePartition狀態轉換呢?其實通過調用doHandleStateChanges將目標方法設置為NewPartition后,會緊接著調用triggerOnlinePartitionStateChange等方法,將狀態進一步向OnlinePartition狀態轉化。

由于在尷尬,在Kafka生產實踐中又出問題了 這篇文章中詳細介紹了OfflinePartition向OnlinePartition的轉化流程,故本篇文章就將重點放在了NewPartition狀態向OnlinePartition的轉化處理邏輯,其實也就是分區創建的流程,這塊的代碼入口如下所示:

圖片

由于PartitionStateMachine的initializeLeaderAndIsrForPartitions方法比較長,接下來將分步講解。

2.1.3 分區初始化流程

接下來我們詳細探討PartitionStateMachine的initializeLeaderAndIsrForPartitions方法。

Step1:首先獲取所有分區對應的在線副本,Seq< Map< TopicPartition, Seq< Int>> > liveReplicasPerPartition 來表示,類比Java的數據結構為List< Map< TopicPartition, List< Interger> >,代碼如下所示:

圖片

在Kafka中創建一個主題時,kafka首先會根據集群節點的負載情況,根據主題的分區數、副本數,物理機架等信息,生成靜態負載情況,存儲在/brokers/topics/{topicName},其數據如下圖所示:

圖片

而liveReplicasPerPartition是在這個數據結構的基礎上篩選出在線的broker,例如如果id為4的broker已下線,那么liveReplicasPerPartition中的值就可能如下所示:

["0":[0,1,2],"1":[1,2],"2":[2,0],"3":[0,1],"4":[0,2],"5":[1,0],"6":[0,2,1],"7":[1,0,2]]

Step2:如果一個分區所有預分配的分片都不在線,則打印錯誤日志,代碼如下所示:

圖片

Step3:為分區創建leaderIsrAndControllerEpoch信息,代碼如下所示:

圖片

這里的實現比較簡單,值得注意的是初始化時分區的Leader則為ISR列表中的第一個分區。

Step4:將分區的狀態信息 leaderIsrAndControllerEpoch(leader,isr,LeaderEpoch、ControllerEpoch)寫入到zookeeper中,具體代碼如下;

圖片

具體就是在zookeeper中創建/broker/topics/{topicName}/partitions/{分區序號}/state,并將leaderIsrAndControllerEpoch寫入到上述節點,具體效果如下圖所示:

圖片

Step5:對zookeeper寫入結果進行處理,對應的代碼如下所示:

圖片

如果在zookeeper中創建成功,將leaderIsrAndControllerEpoch信息緩存到內存中(Map< TopicPartition, leaderIsrAndControllerEpoch>)中,并將信息放入到controllerBrokerRequestBatch,Kafka Broker控制將信息同步到集群的其他Broker上,同時會在state-change.log日志文件中記錄狀態成功變更日志;如果創建失敗,則在state-change.log中輸出對應的錯誤日志。

當然:為了盡量保證上述過程成功創建,Zookeeper的寫入過程引入來重試機制來保證最終執行成功,除非一些類似AUTH_FAILED等不可恢復的異常。

分區的信息寫入到zookeeper的/broker/topics/{topicName}/partitions/{分區序號}/state文件路徑后,會再次調用changeTo方法,在內存中將分區的狀態變更為OnlineParttion。

那在什么時候觸發真正創建分區相關的文件夾呢?

原來在將分區信息寫入到zookeeper指定文件后,由于Kafka Controller訂閱了/broker/topics/{topicName}相關節點,故節點的創建會實時告知Kafka Controller,從而執行分區的選擇,具體的代碼如下所示:

圖片

通過Zookeeper的事件監聽機制,kafka就這樣巧妙的實現了分區狀態機的切換。

3、總結

通過上面的學習,我們對分區的理解應該更加深刻了,從這里我們至少能得出如下結論:

分區的狀態主要包括NonExistentPartition、NewPartition、OnlinePartition、OfflinePartition四個狀態,只有分區狀態為OnlinePartition才能對外提供讀與寫。

Kafka啟動時,在選舉好集群的控制器(Kafka Controller)后會啟動分區狀態機(PartitionStateMachine),Kafka會根據/brokers/topics/{topicName}/partitions/{partition_no}/state中的信息,驅動分區狀態向OnlineParttion轉換。

當新創建主題時,Kafka會根據當前集群的負載情況,主題需要創建的分區數量、副本數量,機架信息等,進行負載均衡,生成分區的意向leader,已經分區副本的分布情況,寫入到/brokers/topics/{topicName}節點上,此時會觸發PartitionModifications,從而觸發分區創建流程,即從NewPartition向OnlineParttion轉換。

責任編輯:武曉燕 來源: 中間件興趣圈
相關推薦

2020-07-09 07:54:35

ThreadPoolE線程池

2021-10-18 11:58:56

負載均衡虛擬機

2022-09-06 08:02:40

死鎖順序鎖輪詢鎖

2021-01-19 05:49:44

DNS協議

2022-09-14 09:01:55

shell可視化

2020-07-15 08:57:40

HTTPSTCP協議

2020-11-16 10:47:14

FreeRTOS應用嵌入式

2022-07-19 16:03:14

KubernetesLinux

2024-03-07 18:11:39

Golang采集鏈接

2023-06-12 08:49:12

RocketMQ消費邏輯

2024-05-10 12:59:58

PyTorch人工智能

2024-01-11 09:53:31

面試C++

2022-09-08 10:14:29

人臉識別算法

2021-08-26 05:02:50

分布式設計

2022-07-15 16:31:49

Postman測試

2024-01-05 08:30:26

自動駕駛算法

2021-06-04 07:27:24

sourcemap前端技術

2022-04-25 10:56:33

前端優化性能

2022-02-15 18:45:35

Linux進程調度器

2023-02-16 18:22:44

ChatGPTWolfram語言
點贊
收藏

51CTO技術棧公眾號

国产欧美一区二区精品久导航| 狠狠综合久久| 欧美男生操女生| av在线com| 巨骚激情综合| 国产乱人伦偷精品视频不卡| 亚州国产精品久久久| www.色天使| 成人短视频软件网站大全app| 亚洲成人在线网站| 亚欧洲精品在线视频免费观看| 国产精品国产av| 国产亚洲高清视频| 久久九九免费视频| 日韩精品卡通动漫网站| 97精品资源在线观看| 欧美性xxxxhd| 欧美在线观看黄| 在线视频二区| 久久亚洲精精品中文字幕早川悠里 | 国产精品无码电影| 成人黄色91| 欧美最新大片在线看| 日韩xxxx视频| av免费看在线| 西野翔中文久久精品国产| 在线视频国产一区| 免费特级黄色片| av网站在线观看免费| 噜噜爱69成人精品| 欧美日韩高清区| 亚洲精品久久久久久国| 久久99国产成人小视频| 精品成人一区二区| 午夜影院免费观看视频| 国产不卡在线| 国产成人综合亚洲91猫咪| 国产91热爆ts人妖在线| 国产91av视频| 国产专区一区| 色综合男人天堂| 午夜精品一区二区三级视频| 成人久久一区| 国产一区二区三区日韩欧美| 91视频免费版污| 在线观看a视频| 国产亚洲欧美日韩在线一区| 精品一卡二卡三卡四卡日本乱码| 囯产精品久久久久久| 国产又黄又大久久| 欧美大片免费观看| 五月天婷婷色综合| 国产韩国精品一区二区三区| 中文字幕国产亚洲| 影音先锋男人在线| 成人三级视频| 最近更新的2019中文字幕| 黄色片网站免费| 少妇精品久久久一区二区| 精品一区二区三区四区| 一二三不卡视频| 亚洲图区在线| 一区二区三区视频观看| 日本一卡二卡在线播放| 欧美freesextv| 久久精品视频播放| 日本妇女毛茸茸| 黄色在线成人| 欧美亚洲在线视频| 五月天免费网站| 久久视频在线| 欧美乱妇高清无乱码| 黄页网站免费观看| av成人激情| 国产不卡视频在线| 亚洲天堂自拍偷拍| 国产精品69毛片高清亚洲| 国产不卡一区二区三区在线观看| 色婷婷av一区二区三| 美日韩一级片在线观看| 国产中文欧美精品| 国产肥老妇视频| 成人aa视频在线观看| 欧美久久久久久一卡四| 欧美性videos| 亚洲第一福利视频在线| 日韩毛片在线免费看| 欧美日韩免费电影| 欧美成人vps| a天堂中文字幕| 97人人精品| 久久欧美在线电影| 波多野结衣影片| 国产精品538一区二区在线| 精品欧美一区二区三区久久久| 国产对白叫床清晰在线播放| 亚洲自拍偷拍图区| 亚洲成熟丰满熟妇高潮xxxxx| 日本电影久久久| 亚洲国产精品久久| 亚洲人做受高潮| 亚洲一区日本| 444亚洲人体| а天堂8中文最新版在线官网| 不卡高清视频专区| 亚洲国产一区在线| 黄色av网址在线免费观看| 国产精品三级久久久久三级| 蜜臀av色欲a片无码精品一区 | 欧美mv日韩| 国色天香2019中文字幕在线观看| 波多野结衣电影在线播放| 国产一区 二区 三区一级| 另类欧美小说| 毛片在线导航| 91麻豆精品国产91久久久久| 久久精品老司机| 亚洲香蕉网站| 成人性生交大片免费看视频直播 | 国产精品视频在线观看免费| 91农村精品一区二区在线| 国产精品亚洲天堂| 日韩毛片免费观看| 亚洲第一福利在线观看| 久久久精品视频免费观看| 免费人成网站在线观看欧美高清| 精品一区国产| wwww亚洲| 欧美mv日韩mv国产网站app| www色aa色aawww| 日韩电影一区| 668精品在线视频| 成人精品在线播放| 亚洲精品自拍动漫在线| 亚洲五月天综合| 伊人久久大香线蕉综合网蜜芽| 久久久久久久一| av黄色在线播放| 成人免费视频播放| 久久久久高清| 国产乱码午夜在线视频| 91久久精品一区二区二区| 中文字幕一区三区久久女搜查官| 欧美成人久久| 51精品在线观看| 亚洲美女综合网| 一区二区不卡在线播放| 日本一二三区在线| 果冻天美麻豆一区二区国产| 欧美精品性视频| 精品国产一级片| 亚洲综合区在线| 亚洲自拍偷拍精品| 99精品视频免费观看视频| 精品国产区在线| 亚洲第一av| 亚洲天堂精品在线| 97人妻精品视频一区| 国产视频视频一区| 性生活免费在线观看| 欧美国产一区二区三区激情无套| 国产日韩精品在线观看| 黄色在线视频网站| 精品美女一区二区| 99久久精品国产亚洲| 久久久精品日韩欧美| 久久精品视频16| 国产一区二区三区日韩精品| 久久久这里只有精品视频| 亚洲国产999| 欧美日韩一区二区在线| 91免费视频污| 欧美三级在线| 久久久久久久久一区二区| 韩国主播福利视频一区二区三区| 一区二区国产精品视频| 91激情在线观看| 中文字幕亚洲在| 国产成人精品综合久久久久99| 最新国产拍偷乱拍精品| 91欧美日韩一区| 国内在线免费视频| 亚洲美女性视频| 亚洲综合网av| 亚洲成av人片在线| 91丨porny丨九色| 亚洲美女视频在线免费观看| 日本免费高清不卡| 嫩呦国产一区二区三区av| 97在线免费观看| 91精彩在线视频| 亚洲国产女人aaa毛片在线| 国产99久久久久久免费看| 亚洲乱码一区二区三区在线观看| 黄色污在线观看| 精品在线播放午夜| 日本中文字幕在线视频观看| 不卡在线一区二区| 国产chinese精品一区二区| а√天堂资源国产精品| 欧美精品九九久久| 求av网址在线观看| 日韩高清av一区二区三区| 97人妻精品一区二区三区| 精品美女久久久久久免费| 日本一卡二卡在线播放| 99精品视频在线播放观看| 五月天开心婷婷| 久久婷婷激情| 欧美日韩三区四区| 精品国产18久久久久久二百| 人人澡人人澡人人看欧美| 18在线观看的| 最新的欧美黄色| 色av男人的天堂免费在线| 日韩免费一区二区| 亚洲一区在线观| 91久久一区二区| 1级黄色大片儿| 亚洲一二三区不卡| 久久久久久久麻豆| 中文字幕欧美国产| 免费a级黄色片| 波多野洁衣一区| 国产成人av免费观看| 精品中文av资源站在线观看| www黄色在线| 国产精品普通话对白| r级无码视频在线观看| 欧美freesex交免费视频| 在线视频不卡一区二区| 精品日产免费二区日产免费二区| 国产精品福利小视频| 日本不卡网站| 98精品国产高清在线xxxx天堂| 午夜小视频在线观看| 久久精品国产欧美亚洲人人爽| 3d成人动漫在线| 一个色综合导航| av在线免费观看网站| 一个人www欧美| aaa在线观看| 国产亚洲一级高清| 成全电影播放在线观看国语| 亚洲欧洲在线视频| 激情小视频在线观看| 国产视频久久网| 理论视频在线| 中文字幕精品在线视频| 尤物网在线观看| 精品久久久91| 视频在线这里都是精品| 欧美国产视频日韩| 91九色porn在线资源| 中文字幕亚洲欧美日韩2019| 户外极限露出调教在线视频| 亚洲人成电影网站色| 国产98在线| xvideos国产精品| 成人影院在线观看| 欧美噜噜久久久xxx| av最新在线| 日本久久久久久久久| 五月激情久久| 91精品久久久久久久久久另类 | 久久96国产精品久久99软件| 无码少妇一区二区三区| 午夜精品短视频| 91精品一区二区三区综合| av动漫在线播放| 国产精品亚洲综合久久| 国产一级做a爰片久久| 久久精品99久久久| 成人免费播放视频| av在线不卡网| 爽爽爽在线观看| 成人精品电影在线观看| 欧美高清性xxxx| 欧美韩国日本综合| 亚洲视频重口味| 午夜欧美大尺度福利影院在线看| 欧产日产国产69| 337p亚洲精品色噜噜噜| 人妻少妇一区二区三区| 国产亚洲一区精品| 欧美寡妇性猛交xxx免费| 欧美一级黑人aaaaaaa做受| 日本美女久久| caoporen国产精品| 亚洲国产精品嫩草影院久久av| 中文字幕黄色大片| 亚洲精品1234| 国产一区二区在线观看免费视频| 国产成人啪免费观看软件| 亚洲精品乱码久久久久久不卡| 国产精品免费丝袜| 午夜毛片在线观看| 欧美一区二区三区日韩| 久久经典视频| 欧美国产日韩一区二区在线观看| 朝桐光一区二区| 国产乱码精品一区二区三区中文| 精品一二三区| 缅甸午夜性猛交xxxx| 狠狠色丁香九九婷婷综合五月| 国产三级国产精品| 一区二区三区精品视频| 中文字幕日韩三级| 亚洲黄色www网站| 日本无删减在线| 国产精品影院在线观看| 久久亚洲国产精品尤物| 国产伦精品一区| 一精品久久久| 国产精品一区二区羞羞答答| 99视频精品在线| 免费日韩在线视频| 欧美精品123区| av在线女优影院| 国产精品福利小视频| 亚洲69av| 1024av视频| 日韩电影在线一区二区三区| 在线观看免费视频黄| 亚洲欧美日韩在线播放| 国产黄在线免费观看| 粉嫩av一区二区三区免费野| 国产欧美久久久| 视频在线观看99| 91在线成人| 日本不卡一区二区三区在线观看| 99精品视频免费观看视频| 精品国产乱码久久久久夜深人妻| 亚洲欧美一区二区久久| 911美女片黄在线观看游戏| 伊人精品在线观看| 欧美一级大片| 日本免费高清不卡| 肉肉av福利一精品导航| a天堂中文字幕| 色8久久精品久久久久久蜜| 国产小视频免费在线观看| 日韩免费av一区二区| 一本久久青青| 黄色高清无遮挡| 中文在线一区二区| 中文字幕在线视频第一页| 中文字幕久久亚洲| 九九久久国产| 四虎影院一区二区| 国产精品中文字幕一区二区三区| 欧美a级片免费看| 欧美一级欧美一级在线播放| 亚洲国产精品精华素| 国产精品一国产精品最新章节| 亚洲国产网站| av直播在线观看| 色欧美片视频在线观看在线视频| 国产三级电影在线| 国产欧美精品在线播放| 亚洲成人精选| 国产精品一区二区无码对白| 欧美午夜激情视频| 福利视频在线播放| 成人免费在线视频网址| 欧美日韩三区| 人妻在线日韩免费视频| 在线免费一区三区| 老司机精品视频在线观看6| av成人在线电影| 国产精品视区| 亚洲一级黄色录像| 日韩午夜激情av| 忘忧草在线日韩www影院| 神马欧美一区二区| 国产一本一道久久香蕉| 日本一区二区三区免费视频| 亚洲欧美国产精品| 91精品一久久香蕉国产线看观看| 国产av熟女一区二区三区| www国产成人免费观看视频 深夜成人网| 中国a一片一级一片| 欧美黑人xxxx| 深夜福利久久| 日本黄色一级网站| 欧美性少妇18aaaa视频| 麻豆影院在线| 美女视频久久| 国产一区二区三区观看| 免费看日批视频| 免费91麻豆精品国产自产在线观看| 加勒比色老久久爱综合网| 久久这里只精品| 精品久久久久久久久久国产| 在线观看精品一区二区三区| 国产精品夜夜夜一区二区三区尤| 青椒成人免费视频| 日本少妇性高潮| 精品国产一区二区三区四区在线观看 | 搞黄视频在线观看|