精品欧美一区二区三区在线观看 _久久久久国色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在线7| 美日韩一级片在线观看| 欧美人在线视频| 中文字幕高清视频| 欧美一区在线观看视频| 色综合天天综合狠狠| 在线不卡日本| 日韩av免费观影| 国产风韵犹存在线视精品| 欧美壮男野外gaytube| 丁香花五月激情| 宅男在线一区| 精品91自产拍在线观看一区| 亚洲福利精品视频| 国产乱码精品一区二三赶尸艳谈| 国产精品毛片久久久久久久| 精品国产免费久久久久久尖叫| 中日韩在线观看视频| 亚洲性视频h| 精品国偷自产在线视频| 在线免费观看黄色小视频| 日韩成人在线观看视频| 欧美视频中文字幕| 国产三区在线视频| wwww亚洲| 亚洲美女视频一区| 亚洲一区二区免费视频软件合集| 亚洲 另类 春色 国产| 国精产品一区一区三区mba视频| 2018日韩中文字幕| 久艹视频在线观看| 一本到12不卡视频在线dvd| 一本大道久久加勒比香蕉| 日韩综合第一页| 欧美视频二区欧美影视| 欧美精三区欧美精三区| 国产日韩一区二区在线| 2019中文字幕在线电影免费 | 久久精品99| 亚洲精品国产一区二| 国产在线看一区| 国产日韩精品一区二区| 国产精品sm调教免费专区| 久久一区二区三区超碰国产精品| 久久久久久有精品国产| 五月天丁香激情| 中文字幕av亚洲精品一部二部| 中文字幕在线观看亚洲| 亚洲一二三精品| 欧美日韩高清| 在线观看亚洲视频| 天天操天天舔天天射| 国产免费久久| 在线视频免费一区二区| 国产三级aaa| 97久久夜色精品国产| 久久精品国产一区二区三区| 貂蝉被到爽流白浆在线观看| 成人影视亚洲图片在线| 视频直播国产精品| 亚洲一级二级片| 亚洲成人精品| 欧美大片免费看| 久久精品国产亚洲av麻豆色欲 | 在线观看免费不卡av| 欧美成人毛片| 日韩视频在线观看一区二区| 欧美熟妇精品一区二区| 欧美激情极品| 亚洲人成啪啪网站| 影音先锋男人资源在线观看| 一区二区不卡| 91精品国产色综合久久不卡98| 免费在线不卡视频| 蜜桃久久久久久久| 亚洲www在线| 少妇高潮一区二区三区69| 91视频91自| 亚洲精品国产精品久久| 91网址在线观看| 午夜影院久久久| 黄色三级视频片| 久久天堂久久| 亚洲精品视频网上网址在线观看| 国产123在线| 欧美精品一区二区三区久久久竹菊| 久久久免费观看视频| 成人毛片一区二区三区| 国产精品中文字幕日韩精品| 女同一区二区| 成人在线免费看黄| 欧美午夜女人视频在线| 91性高潮久久久久久久| 九九久久精品| 欧美精品免费在线| 成人av网站在线播放| 国产一区二区精品在线观看| 美乳视频一区二区| 黄色在线免费| 一本大道久久a久久精品综合| 欧美成人乱码一二三四区免费| 风间由美性色一区二区三区四区| 亚洲欧美日韩精品久久奇米色影视| av最新在线观看| 久久黄色影院| 国产成人精品日本亚洲11| 黄色片在线免费看| 亚洲午夜精品在线| 国产乱码一区二区三区四区| 网友自拍区视频精品| 毛片精品免费在线观看| 黄色片视频免费| 成人福利电影精品一区二区在线观看| 亚洲国产欧美日韩| 亚洲欧美韩国| 精品久久久久久久久久久久包黑料| 亚洲色图日韩精品| 久久福利精品| 精品视频一区二区| 蜜乳av一区| 91麻豆精品国产91久久久久久| a级大片在线观看| 在线观看不卡| 91色视频在线导航| 五月婷婷在线观看| 在线中文字幕一区二区| 亚洲色图14p| 亚洲国产精品第一区二区三区| 成人国产精品久久久久久亚洲| 黄色片免费在线| 精品日本高清在线播放| 国产原创剧情av| 欧美日韩mv| 亚洲a∨日韩av高清在线观看| 福利片在线观看| 91久久精品午夜一区二区| 国产夫妻性爱视频| 亚洲美女少妇无套啪啪呻吟| 国产a一区二区| 欧美78videosex性欧美| 日韩精品一区在线| 久久国产在线视频| 国产成人免费视频网站| 欧美一区二区三区综合| 奇米一区二区| 欧美国产中文字幕| 蜜臀久久精品久久久久| 亚洲国产日韩在线一区模特| 色哟哟网站在线观看| 欧美性久久久| 国产一区二区三区高清| 黄色在线观看www| 国产丝袜视频一区| 波多野结衣视频在线观看| 国产亚洲视频系列| 九一精品在线观看| 国产精品久久观看| 成人激情av| 极品美鲍一区| 亚洲网在线观看| 伊人免费在线观看| 亚洲欧美日韩国产一区二区三区 | 天堂…中文在线最新版在线| 国产精品videossex| 亚洲2020天天堂在线观看| 亚洲欧美一区二区三| 色香蕉成人二区免费| 国产免费嫩草影院| 国产一区二区不卡在线| 国产精品一色哟哟| 一区二区三区四区在线看| 国产精品男人的天堂| 二区在线播放| 亚洲精品国产品国语在线 | 宅男噜噜噜66一区二区66| 免费麻豆国产一区二区三区四区| 成人18视频日本| 一区二区xxx| 欧美日韩一区二区高清| 欧美凹凸一区二区三区视频| 日本午夜免费一区二区| 欧美极品xxxx| 国产一区电影| 欧美大胆人体bbbb| 亚洲大片免费观看| 亚洲美女免费在线| 野外性满足hd| 国产一区二区不卡在线 | 九九久久精品视频| 男人添女人荫蒂免费视频| 红桃视频在线观看一区二区| 91精品啪aⅴ在线观看国产| av中文字幕在线观看第一页| 永久555www成人免费| 亚洲国产精品久久久久久久| 日本精品视频一区二区三区| 国产免费无码一区二区视频 | 男人av资源站| 91在线一区二区| 国产乱女淫av麻豆国产| 久久国产精品久久w女人spa| 国产三级中文字幕| 九九综合在线| 操一操视频一区| 国产精品亲子伦av一区二区三区| 欧美黑人视频一区| 天天影视久久综合| 亚洲精品视频在线播放| 后进极品白嫩翘臀在线视频| 欧美日韩一本到| 日本在线播放视频| 一区二区三区日韩精品| 日本视频在线免费| 久久一日本道色综合| 国产成人精品一区二区在线小狼| 久久综合伊人| 男女视频网站在线观看| 欧美日韩免费| 日韩中文在线字幕| 久久国产精品成人免费观看的软件| 精品国产91亚洲一区二区三区www 精品国产_亚洲人成在线 | 国产日韩欧美高清在线| 精品夜夜澡人妻无码av| 成人综合婷婷国产精品久久蜜臀| 国产一级免费大片| 免费成人在线影院| 尤蜜粉嫩av国产一区二区三区| 亚洲视频www| aa视频在线播放| 黄色av日韩| 欧美黄色免费网址| 欧美/亚洲一区| 在线视频不卡一区二区三区| 精品国产一区一区二区三亚瑟 | 色吊丝在线永久观看最新版本| 欧美v亚洲v综合ⅴ国产v| av男人天堂网| 日韩欧美一区在线| 精品国产伦一区二区三| 337p亚洲精品色噜噜噜| 国产精品一区二区黑人巨大| 欧美人与性动xxxx| 一级全黄裸体免费视频| 欧美日韩黄色影视| 99国产精品99| 精品卡一卡二卡三卡四在线| 亚洲免费不卡视频| 亚洲成在人线av| 五月婷婷在线播放| 亚洲午夜av电影| 在线a免费看| 超碰91人人草人人干| 最爽无遮挡行房视频在线| 久热精品视频在线观看一区| caoporm免费视频在线| 久久99久久久久久久噜噜| 丁香花高清在线观看完整版| 国内揄拍国内精品| 伊人网在线播放| 国产精品久久久久秋霞鲁丝| 国产精品诱惑| eeuss一区二区三区| 精品欠久久久中文字幕加勒比| 精品国产福利| 精品高清久久| 日本一区二区三区四区五区六区| 欧美日一区二区在线观看| 蜜桃传媒一区二区三区| 欧美a一区二区| 超碰91在线播放| aaa亚洲精品一二三区| 91成人在线免费视频| 亚洲色欲色欲www| 日韩av一区二区在线播放| 色狠狠一区二区| 国产精品久久久久久免费| 亚洲成色www8888| 国产对白叫床清晰在线播放| 久久久成人的性感天堂| japanese色国产在线看视频| 国产91在线播放九色快色| 欧美91在线|欧美| 国产精品一区二区免费看| 国产一区二区三区天码| 日本特级黄色大片| 国产精品美女久久久| 91女神在线观看| kk眼镜猥琐国模调教系列一区二区| 这里只有久久精品| 亚洲精品视频在线看| 少妇高潮av久久久久久| 日韩一区二区三免费高清| 免费黄网站在线观看| 欧美精品在线免费| 国产韩日精品| 激情一区二区三区| 在线观看国产精品入口| 黄色片久久久久| 丁香婷婷综合激情五月色| 中文字幕第4页| 亚洲一区二区不卡免费| 一卡二卡在线观看| 国产丝袜一区二区| 日本天码aⅴ片在线电影网站| 国产精品视频内| 亚洲+小说+欧美+激情+另类| 日韩一级特黄毛片| 免费日本视频一区| 老牛影视av老牛影视av| 亚洲影院久久精品| 国产剧情久久久| 伊人伊成久久人综合网站| 中文字幕人成乱码在线观看| 91久久伊人青青碰碰婷婷| 欧美顶级大胆免费视频| 国产乱子夫妻xx黑人xyx真爽| 成人毛片老司机大片| 欧美日韩在线观看免费| 欧美日韩精品福利| 爱爱爱免费视频在线观看| 97香蕉超级碰碰久久免费的优势| 四虎国产精品成人免费影视| 日韩欧美一区二区三区久久婷婷| 欧美另类女人| 欧美性猛交xx| 亚洲日本一区二区三区| 夜夜爽8888| 伊人久久久久久久久久久| 欧美aa视频| 欧美日产一区二区三区在线观看| 影音先锋久久| 理论片大全免费理伦片| 亚洲五月六月丁香激情| 黄色一级大片在线免费看国产一| 精品中文字幕在线| 欧美日韩国产一区二区在线观看| 中文字幕乱码一区二区三区 | 2025中文字幕| 亚洲一区二区三区免费视频| 亚洲第一精品网站| 欧美国产激情18| 91蝌蚪精品视频| 18禁裸男晨勃露j毛免费观看| 成人做爰69片免费看网站| 国产一级大片在线观看| 亚洲白拍色综合图区| 91吃瓜在线观看| 久久精品国产美女| 性欧美xxxx大乳国产app| 日韩人妻无码精品综合区| 欧美亚洲国产一区二区三区| 中文日本在线观看| 成人欧美一区二区三区在线 | 欧美一级视频在线观看| 一区二区导航| 一区二区三区韩国| 亚洲同性gay激情无套| 国产黄色一区二区| 久久久综合av| 美女久久99| 亚洲免费999| 亚洲一区二区三区四区五区中文| 四虎免费在线观看| 国产成一区二区| 亚洲国产老妈| 污污污www精品国产网站| 日韩欧美综合在线视频| 自拍视频在线网| 99一区二区三区| 久久精品网址| 国产午夜精品理论片在线| 亚洲а∨天堂久久精品喷水| 暖暖成人免费视频| 色爽爽爽爽爽爽爽爽| 99久久国产综合色|国产精品| 黄色污污视频软件| 欧美精品免费看| 国产精品密蕾丝视频下载| 亚洲黄色av片| 红桃视频成人在线观看| av播放在线观看| 国产精品国产三级欧美二区| 丝袜亚洲另类欧美综合| 草视频在线观看| 亚洲图片在区色| 91久久偷偷做嫩草影院电| 国产精品动漫网站| 亚洲综合视频网| 国际av在线| 高清不卡一区二区三区| 青青青伊人色综合久久| 豆国产97在线 | 亚洲| 在线视频中文亚洲| 女同久久另类99精品国产| 99国产精品久久久久久| 色综合天天性综合| 日韩另类在线|