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

尷尬,在Kafka生產實踐中又出問題了

開發 架構
本文從一個生產實際故障開始進行分析,經過分析得出單副本主題在集群中單臺節點下線會引起部分隊列無法寫入,解決辦法是要先執行主題分區移動,也就是將需要停止的broker上所在的分區移動到其他broker上,這個過程并不會對消息發送,消息消費造成影響。

1、背景

最近在折騰Kafka日志集群,由于公司部署的應用不斷增加,日志采集程序將采集到的日志發送到Kafka集群時出現了較大延遲,總的TPS始終上不去,為了不影響業務團隊通過日志排查問題,采取了先解決問題,再排查的做法,對Kafka集群進行擴容,但擴容后尷尬的是新增加的5臺機器中,有兩臺機器的消費發送響應時間比其他機器明顯高出不少,為了確保消息服務的穩定性,又臨時對集群進行縮容,將這臺機器從集群中剔除,具體的操作就是簡單粗暴的使用 kill pid命令,但意外發生了。

發現Java客戶端報如下錯誤:

圖片

而Go客戶端報的錯誤如下所示:

圖片

基本可以認為是部分分區沒有在線Leader,無法成功發送消息。

2、問題分析

那為什么會出現這個問題嗎?Kafka一個節點下線,不是會自動觸發故障轉移,分區leader不是會被重新選舉嗎?請帶著這個疑問,開始我們今天的探究之旅。

首先我們可以先看看當前存在問題的分區的路由信息,從第一張圖中看出主題dw_test_kafka_0816000的101分區消息發送失敗,我們在Zookeeper中看一下其狀態,具體命令如下:

./zkCli.sh -server 127.0.0.1:2181
get -s /kafka_cluster_01/brokers/topics/dw_test_kafka_0816000/partitions/101/state

該命令可以看到對應分區的相信信息,如下圖所示:

圖片

這里顯示出leader的狀態為-1,而isr列表中只有一副本,在broker-1上,但此時broker id為1的機器已經下線了,那為什么不會觸發分區Leader重新選舉呢?

其實看到這里,我相信你只要稍微細想一下,就能發現端倪,isr字段的值為1,說明該分區的副本數為1,說明該分區只在一個Broker上存儲數據,一旦Broker下線,由于集群內其他Broker上并沒有該分區的數據,此時是無法進行故障轉移的,因為一旦要進行故障轉移,分區的數據就會丟失,這樣帶來的影響將是非常嚴重的。

那為什么該主題的副本數會設置為1呢?那是因為當時集群的壓力太大,節點之間復制數據量巨大,網卡基本滿負荷在運轉,而又是日志集群,對數據的丟失的接受程度較大,故當時為了避免數據在集群之間的大量復制,將該主題的副本數設置為了1。

但集群節點的停機維護是少不了的,總不能每一次停機維護,都會出現一段時間數據寫入失敗吧。要解決這個問題,我們在停機之前,需要先對主題進行分區移動,將該主題的分區從需要停機的集群中移除。

主題分區移動的具體做法,請參考我之前的一篇文章Kafka主題遷移實踐 的第三部分。

3、Kafka節點下線分區的故障轉移機制

Kafka單副本的主題在集群內一臺節點下線后,將無法完成分區的故障轉移機制,為了深入掌握底層的一些實現細節,我想再深入探究一下kafka節點下線的一些故障轉移機制。

溫馨提示:接下來主要是從源碼角度深入探究實現原理,加深對這個過程的理解,如果大家不感興趣,可以直接進入到本文的第4個部分:總結。

在Kafka中依賴的Zookeeper服務器上存儲了當前集群內存活的broker信息,具體的路徑為/{namespace}/brokers/brokers/ids,具體圖示如下:

圖片

并且ids下的每一個節點記錄了Broker的一些信息,例如對外提供服務的協議、端口等,值得注意的是這些節點為臨時節點,如下圖所示:

圖片

這樣一旦對應的Broker宕機下線,對應的節點會刪除,Kafka集群內的Controller角色在啟動時會監聽該節點下節點的變化,并作出響應,最終將會調用KafkaController的onBrokerFailure方法,具體代碼如下所示:

圖片

這個方法實現比較復雜,我們在這里不做過多分散,重點查找分區的故障轉移機制,也就是接下來我們將具體分析KafkaController的onReplicasBecomeOffline方法,主要探究分區的故障轉移機制。

3.1 onReplicasBecomeOffline故障轉移

由于該方法實現復雜,接下來將分布對其進行詳解。

Step1:從需要設置為下線狀態分區進行分組,分組依據為是否需要刪除,沒有觸發刪除的集合用newofflineReplicasNotForDeletion表示,需要被刪除的集合用newofflineReplicasForDeletion表示。

圖片

Step2:挑選沒有Leader的分區,用partitionsWithoutLeader,代碼如下圖所示:

圖片

分區沒有Leader的標準是:分區的Leader副本所在的Broker沒有下線,并且沒有被刪除。

Step3:將沒有Leader的分區狀態變更為OfflinePartition(離線狀態),這里的狀態更新是放在kafka Controller中的內存中,具體的內存結構:Map[TopicPartition, PartitionState]。

Step4:Kafka分區狀態機驅動(觸發)分區狀態為OfflinePartition、NewPartition向OnlinePartition轉化,狀態的轉化主要包括兩個重要的步驟:

調用PartitionStateMachine的doHandleStateChanges的方法,驅動分區狀態機的轉換。

然后調用ControllerBrokerRequestBatch的sendRequestsToBrokers方法,實現元信息在其他Broker上的同步。

由于篇幅的問題,我們這篇文章不會體系化的介紹Kafka分區狀態機的實現細節,先重點關注OfflinePartition離線狀態向OnlinePartition轉化過程。

圖片

我們首先說明一下OfflinePartition離線狀態向OnlinePartition轉化過程時各個參數的含義:

Seq[TopicPartition] partitions 當前處于OfflinePartition、NewPartition狀態、并且沒有刪除的分區。

PartitionState targetState 狀態驅動的目標狀態:OnlinePartition。

PartitionLeaderElectionStrategy 分區Leader選舉策略,這里傳入的是OfflinePartitionLeaderElectionStrategy,分區離線狀態的Leader選舉策略

這里判斷一下分區是否有效的依據主要是要根據狀態機設置的驅動條件,例如只有分區狀態為OnlinePartition、NewPartition、OfflinePartition三個狀態才能轉換為OnlinePartition。

接下來重點看變更為OnlinePartition的具體實現邏輯,具體代碼如下所示:

圖片

具體實現分為3個步驟:

首先先分別帥選出當前狀態為NewPartition的集合與(OfflinePartition或者OnlinePartition)分區。

狀態為NewPartition的分區,執行分區的初始化,通常為分區擴容或主題新創建

狀態為OfflinePartition或者OnlinePartition的執行分區重新選舉,因為這些集合中的分區是當前沒有Leader的分區,這些分區暫時無法接受讀寫請求。

接下來我們重點看一下離線狀態變更為OnlinePartition的分區leader選舉實現,具體方法為:PartitionStateMachine的electLeaderForPartitions方法,其代碼如下所示:

圖片

這個方法的實現結構比較簡單,返回值為兩個集合,一個選舉成功的集合,一個選舉失敗的集合,同時選舉過程中如果出現可恢復異常,則會進行重試。

具體的重試邏輯由doElectLeaderForPartitions方法實現,該方法非常復雜。

3.2 分區選舉機制

分區選舉由PartitionStateMachine的doElectLeaderForPartitions方法實現,接下來分步進行講解。

Step1:首先從Zookeeper中獲取需要選舉分區的元信息,代碼如下所示:

圖片

Kafka中主題的路由信息存儲在Zookeeper中,具體路徑為:/{namespace}/brokers/topics/{topicName}}/partitions/{partition}/state,具體存儲的內容如下所示:

圖片

Step2:將查詢出來的主題分區元信息,組裝成Map< TopicPartition, LeaderIsrAndControllerEpoch>的Map結構,代碼如下所示:

圖片

Step3:將分區中的controllerEpoch與當前Kafka Controller的epoch對比,刷選出無效與有效集合,具體代碼如下所示:

圖片

如果當前控制器的controllerEpoch小于分區狀態中的controllerEpoch,說明已有新的Broker已取代當前Controller成為集群新的Controller,本次無法進行Leader選取,并且打印日志。

Step4:根據Leader選舉策略進行Leader選舉,代碼如下所示:

圖片

由于我們這次是由OfflinePartition狀態向OnlinePartition狀態轉換,進入的分支為leaderForOffline,稍后我們再詳細介紹該方法,經過選舉后的返回值為兩個集合,其中partitionsWithoutLeaders表示未成功選舉出Leader的分區,而partitionsWithLeaders表示成功選舉出Leader的分區。

Step5:沒有成功選舉出Leader的分區打印對應日志,并加入到失敗隊列集合中,如下圖所示:

圖片

Step5:將選舉結果更新到zookeeper中,如下圖所示:

圖片

Step6:將最新的分區選舉結果同步到其他Broker節點上。

圖片

更新分區狀態的請求LEADER_AND_ISR被其他Broker接受后,會根據分區的leader與副本信息,成為該分區的Leader節點或從節點,關于這塊的實現細節在專欄的后續文章中會專門提及。

那OfflinePartitionLeaderElectionStrategy選舉策略具體是如何進行選舉的呢?接下來我們探究其實現細節。

3.3 OfflinePartitionLeaderElectionStrategy選舉策略

OfflinePartitionLeaderElectionStrategy的選舉策略實現代碼見PartitionStateMachine的leaderForOffline,我們還是采取分步探討的方式。

Step1:主要初始化幾個集合,代碼如下

圖片

對上面的變量做一個簡單介紹:

partitionsWithNoLiveInSyncReplicas 分區的副本所在的Broker全部不存活

partitionsWithLiveInSyncReplicas 分區副本集合所在的broker部分或全部存活

partitionsWithUncleanLeaderElectionState 主題是否開啟了副本不在isr集合中也可以參與Leader競選,可在主題級別設置unclean.leader.election.enable,默認為false。

Step2:執行分區Leader選舉,具體實現代碼如下所示:

圖片

首先解釋如下幾個變量的含義:

assignment 分區設置的副本集(所在brokerId)。

liveReplicas 當前在線的副本集。

具體的選舉算法如下所示:

圖片

離線轉在線的選舉算法比較簡單:如果unclean.leader.election.enable=false,則從存活的ISR集合中選擇第一個成為分區的Leader,如果沒有存活的ISR副本,并且unclean.leader.election.enable=true,則選擇一個在線的副本,否則返回NONE,表示沒有成功選擇一個合適的Leader。

然后返回本次選舉的結果,完成本次選舉。

4、總結

本文從一個生產實際故障開始進行分析,經過分析得出單副本主題在集群中單臺節點下線會引起部分隊列無法寫入,解決辦法是要先執行主題分區移動,也就是將需要停止的broker上所在的分區移動到其他broker上,這個過程并不會對消息發送,消息消費造成影響。

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

2021-03-02 06:02:03

Kafka高并發系統

2023-07-12 16:07:50

鏈路數據湖技術

2012-05-16 13:43:20

操作系統故障檢修系統管理

2017-01-10 16:04:02

容器MySQL實踐

2013-10-18 17:09:18

Windows 8.1微軟

2022-07-08 09:26:45

Flink快手計算

2023-09-05 07:40:37

PythonSDKAPI

2022-06-03 09:21:47

Svelte前端攜程

2021-03-12 07:47:44

KubernetesRedis-clustRedis

2010-03-09 17:32:45

Python數組

2013-04-19 10:40:03

2023-10-16 07:39:02

ELKpod日志

2023-01-14 22:59:34

2023-12-08 07:59:04

2022-06-07 00:33:21

驅動安卓開發

2021-04-23 09:33:55

Windows10操作系統微軟

2023-10-16 16:00:27

Redis限流

2010-03-17 16:06:08

Java線程同步

2023-12-06 15:21:16

Java云原生

2023-10-20 15:08:28

pod日志采集
點贊
收藏

51CTO技術棧公眾號

日本高清无吗v一区| 美国欧美日韩国产在线播放| 日韩免费成人网| 免费视频爱爱太爽了| 理论片中文字幕| 国产精品五区| 色妞欧美日韩在线| 色诱av手机版| 成人看片在线观看| 亚洲在线视频免费观看| 久久综合中文色婷婷| 在线免费看91| 亚洲免费激情| 久久这里有精品| 丰满少妇一区二区三区| www.久久久.com| 欧美日韩国产中字| 玖玖精品在线视频| 毛片网站在线观看| 国产一区二区三区日韩| 欧美亚洲国产视频| 永久免费看黄网站| 欧美女优在线视频| 日韩欧美专区在线| 999精彩视频| 欧美巨大丰满猛性社交| 最新中文字幕一区二区三区| 久久久影院一区二区三区| 91麻豆视频在线观看| 美女黄色成人网| 久久久久国产视频| 老司机成人免费视频| 精品国产精品国产偷麻豆| 精品国产91亚洲一区二区三区婷婷| 天天干天天玩天天操| 厕沟全景美女厕沟精品| 亚洲大片精品永久免费| www.18av.com| 美女羞羞视频在线观看| 国产日产欧美一区二区视频| 国产精品免费一区二区三区| 国产精品无码久久久久成人app| 久久亚洲视频| 97视频免费在线看| 国产亚洲欧美精品久久久www| 91综合在线| 尤物九九久久国产精品的分类 | 五月综合色婷婷| 国产欧美日韩精品高清二区综合区| 亚洲第一网站免费视频| 日韩精品――色哟哟| 日本一区二区三区视频在线看| 欧美日韩一级二级| 一道本在线免费视频| 香蕉成人影院| 欧美性猛交xxxxxx富婆| 亚洲天堂网一区| 日本在线视频一区二区| 精品1区2区3区| 狠狠躁狠狠躁视频专区| 国产亚洲人成a在线v网站| 欧美日韩一区二区欧美激情| 欧美一级特黄a| 香蕉久久一区| 日韩亚洲欧美在线| 在线免费看黄色片| 网曝91综合精品门事件在线| 亚洲老头同性xxxxx| 国产精品久久久久无码av色戒| 国产精品片aa在线观看| 在线丨暗呦小u女国产精品| 五月天免费网站| 亚洲欧美综合久久久| 九九热在线精品视频| 国产在线拍揄自揄拍无码视频| 在线不卡视频| 国产成人av在线播放| 亚洲视频在线观看一区二区 | wwwww在线观看| 福利电影一区| 亚洲乱码一区二区| www成人啪啪18软件| 亚洲一本二本| 97色伦亚洲国产| 欧美超碰在线观看| 精品一区二区久久久| 高清视频一区二区三区| 日韩a在线观看| 国产精品久久久久国产精品日日| 午夜久久久久久久久久久| brazzers在线观看| 色久优优欧美色久优优| 中文字幕一区二区在线观看视频| 凹凸成人在线| 国产亚洲精品一区二区| www.97视频| 亚洲免费精品| 国产在线视频一区| 日韩永久免费视频| 国产精品二三区| 日韩免费视频播放| 在线成人免费| 日韩精品在线免费播放| 大地资源高清在线视频观看| 最新国产拍偷乱拍精品| 国产日韩欧美电影在线观看| 天堂中文资源在线观看| 综合欧美一区二区三区| av动漫在线观看| 亚洲精品福利| 在线视频日本亚洲性| 国产无遮挡aaa片爽爽| 久久99久久久欧美国产| 麻豆av一区二区三区| 一二三四区在线观看| 欧美无砖砖区免费| 国产三级视频网站| 极品中文字幕一区| 91久久国产婷婷一区二区| 欧美孕妇性xxxⅹ精品hd| 亚洲主播在线观看| 欧美一级特黄aaa| 国产探花在线精品一区二区| 97久久精品人人澡人人爽缅北| 97人人爽人人爽人人爽| 欧美国产日韩一二三区| 男人的天堂99| 加勒比中文字幕精品| 久热精品视频在线| 一区二区国产欧美| 国产欧美综合在线观看第十页| 日本国产在线播放| 1769国产精品视频| 欧美男插女视频| 国产乱码精品一区二区三区精东| 亚洲国产高清aⅴ视频| 久草精品在线播放| 最新国产精品视频| 青青青国产精品一区二区| 色wwwwww| 午夜在线成人av| 久草免费资源站| 欧美日韩1080p| 亚洲一区中文字幕在线观看| 麻豆tv在线| 91精品欧美福利在线观看| 国产精品夜夜夜爽阿娇| 精品一区二区三区视频| 亚洲一卡二卡三卡| 成人国产精品久久| 久久99久久99精品中文字幕| 国产叼嘿视频在线观看| 亚洲精品美国一| 91精品人妻一区二区三区蜜桃2| 欧美日韩亚洲一区三区| 成人动漫在线观看视频| segui88久久综合| 亚洲国产精品中文| 国产农村妇女aaaaa视频| 久久品道一品道久久精品| 久久九九国产视频| 日韩国产综合| 91免费精品视频| 婷婷在线播放| 亚洲成年网站在线观看| 91视频免费网址| 久久久三级国产网站| 天天碰免费视频| 99精品美女| 99久久伊人精品影院| 182在线播放| 国产丝袜一区二区三区| 亚洲天堂视频在线播放| 亚洲欧洲国产日韩| 黄色性视频网站| 亚洲欧美久久| 亚洲一区高清| 国产精品调教视频| 国产精品黄色av| 顶级网黄在线播放| 日韩第一页在线| 日韩乱码一区二区三区| 亚洲精品第一国产综合野| 在线观看国产免费视频| 免费一级片91| 欧美无砖专区免费| 国产一区二区三区网| 999国产在线| 在线观看的黄色| 久久精品视频va| 无码国产精品一区二区免费16 | 国产精品午夜福利| 欧美日韩国产色| 国产大屁股喷水视频在线观看| 国产aⅴ综合色| 亚欧在线免费观看| 国产精品豆花视频| 性欧美大战久久久久久久免费观看 | 国产精品美女久久久久久不卡 | 欧美 国产 小说 另类| 日韩欧美网站| 久久99精品久久久久久久青青日本 | 国产精品二区视频| 日日夜夜精品视频天天综合网| 大地资源第二页在线观看高清版| 午夜先锋成人动漫在线| 91精品免费看| xx欧美视频| 久久免费精品视频| 超碰在线无需免费| 国产亚洲精品久久久优势| 人妻妺妺窝人体色www聚色窝 | 性生交免费视频| 亚洲茄子视频| 永久免费看av| 日韩久久久久| 欧美高清一区二区| 亚洲国产中文在线| 成人免费视频a| 日韩欧美精品电影| 国产69精品久久久久久| 天天色天天射天天综合网| 最近2019年手机中文字幕| 青春草在线观看| 亚洲级视频在线观看免费1级| 99久久久国产精品无码免费| 欧美日韩在线一区二区| av网站中文字幕| 天天综合色天天综合色h| 国产探花在线播放| **欧美大码日韩| 天堂а√在线中文在线鲁大师| 国产欧美一区二区精品忘忧草| 国产呦小j女精品视频| 不卡欧美aaaaa| 69亚洲乱人伦| 丰满亚洲少妇av| 丰满人妻一区二区三区免费视频棣 | 亚洲欧洲三级电影| 免费成人深夜天涯网站| 久久久国产午夜精品| 亚洲最大成人网站| 91蜜桃传媒精品久久久一区二区| 亚洲视频 中文字幕| 国产成人精品免费看| 女人扒开双腿让男人捅| 国产一区 二区 三区一级| 91免费视频污| 国产精品99久久久久久似苏梦涵| 爽爽爽在线观看| 国产精品99久久久久久久女警| 少妇精品无码一区二区| av综合在线播放| 亚洲国产精品成人综合久久久| zzijzzij亚洲日本少妇熟睡| 日本少妇毛茸茸| 2022国产精品视频| 国产毛片欧美毛片久久久| 中文字幕中文字幕一区| av成人免费网站| 亚洲一二三区不卡| 天天操天天干视频| 色综合av在线| 一起草av在线| 日韩精品资源二区在线| 三级网站在线看| 国产午夜精品视频| 免费黄色网页在线观看| 久久夜精品香蕉| www.51av欧美视频| 国产a级全部精品| 婷婷激情成人| 福利精品视频| 久久99久久人婷婷精品综合| 亚洲一卡二卡| 在线视频观看日韩| 国产精品少妇在线视频| 激情综合网最新| 亚洲精品第二页| 国产亚洲视频系列| 日本精品在线免费观看| 亚洲成人午夜影院| 国产裸体美女永久免费无遮挡| 日韩视频免费直播| 亚洲日本中文字幕在线| 中文字幕亚洲在线| 国产乱妇乱子在线播视频播放网站| 国产91精品青草社区| 人人玩人人添人人澡欧美| 国产欧美丝袜| 日韩精品久久| 欧美二区在线视频| 精品一二线国产| 成人免费av片| 亚洲精品一二三区| 亚洲图片欧美日韩| 日韩一区二区在线观看视频| 男人的天堂av高清在线| 久久综合五月天| 日韩高清在线| 精品国产乱码久久久久久郑州公司 | 原纱央莉成人av片| 亚洲一区二区三区毛片| 九热爱视频精品视频| 成人一级生活片| 男女视频一区二区| 大地资源二中文在线影视观看| 亚洲视频资源在线| 亚洲成人av网址| 亚洲精品久久7777777| 国产在线看片| 国产精品高清在线| 日韩美女精品| 欧美在线观看黄| 久久99精品国产麻豆不卡| 日韩精品电影一区二区| 亚洲国产日韩综合久久精品| 亚洲一区中文字幕永久在线| 亚洲欧洲日产国产网站| wwwww亚洲| 99久久免费国| 精品无码m3u8在线观看| 裸体素人女欧美日韩| 97人人模人人爽人人澡| 中文字幕欧美三区| 五月婷婷激情视频| 亚洲激情视频网站| segui88久久综合9999| 亚洲专区在线视频| 91成人观看| 久久精品国产露脸对白| 中文字幕av一区二区三区高| 无码人妻久久一区二区三区| 日韩精品视频观看| h片在线观看| 国产美女精品久久久| 国产精品激情电影| 久久久久中文字幕亚洲精品| 亚洲日韩欧美一区二区在线| 91精品人妻一区二区三区果冻| 在线色欧美三级视频| 欧美色网一区| 日本精品视频一区| 日韩黄色片在线观看| 欧美另类z0zx974| 在线视频中文字幕一区二区| 九色在线播放| 国产精品成人一区| blacked蜜桃精品一区| 99视频免费播放| 亚洲国产成人自拍| 国产免费不卡av| 欧美另类暴力丝袜| 999久久精品| 阿v天堂2017| 久久久久久久久久久电影| 国产天堂第一区| 色av中文字幕一区| 日本精品在线观看| www插插插无码视频网站| 91在线云播放| 久久精品五月天| 日韩在线观看网址| 亚洲一区二区三区中文字幕在线观看| 黄色特一级视频| 91蜜桃免费观看视频| 国内av在线播放| 精品国产一区二区三区久久| 免费欧美网站| 成人免费播放器| 久久久久久久久99精品| 中文字幕乱码中文字幕| 久久成人综合视频| 国产欧美啪啪| 狠狠热免费视频| 一区二区三区不卡视频在线观看| 日韩一级片免费看| 国产91在线高潮白浆在线观看 | 亚洲色图校园春色| 欧美男男gaygay1069| 国产高清www| 国产亚洲成av人在线观看导航| 国产又粗又猛又爽| 91av在线播放| 久久中文字幕二区| 亚洲少妇18p| 欧美日韩激情一区| 三妻四妾的电影电视剧在线观看| 欧美一区二区三区在线免费观看| 久久99精品国产麻豆不卡| 在线观看免费国产视频| 色噜噜亚洲精品中文字幕| 欧美成a人免费观看久久| 小明看看成人免费视频| 午夜精品视频一区| 老司机免费在线视频| 欧美日韩精品中文字幕一区二区| 国内精品免费**视频| 91视频久久久| 久久久久久久久久久av|