精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

91麻豆免费视频网站| 大肉大捧一进一出好爽视频| 97精品久久人人爽人人爽| 欧美gayvideo| 91精品久久久久久久91蜜桃| 欧美日韩激情四射| 日批视频免费播放| 秋霞午夜鲁丝一区二区老狼| 久久亚洲国产精品成人av秋霞| 真实乱偷全部视频| 亚洲电影观看| 国产精品久久久久一区| 亚洲综合色激情五月| 日本少妇性生活| 精品72久久久久中文字幕| 欧美日本在线播放| 欧美视频在线观看视频| 高清中文字幕一区二区三区| 国产精品自拍三区| 日本精品一区二区三区在线播放视频| 成年人视频软件| 操欧美女人视频| 91福利区一区二区三区| 国产911在线观看| 国产精品久久一区二区三区不卡| 国产精品一区二区三区四区| 国内精品久久久久久久| 国产又黄又粗又猛又爽的| 女一区二区三区| 欧美一级搡bbbb搡bbbb| 一本大道熟女人妻中文字幕在线 | 中文字幕一区二区三区精华液| 成人免费看片网址| 一级黄色大毛片| 亚洲欧美日韩在线观看a三区| 另类美女黄大片| 黄色片网站免费| 日本午夜精品久久久| 欧美一级欧美三级在线观看| 污污视频网站免费观看| 91高清在线观看视频| 国产欧美日韩不卡免费| 精品视频免费观看| 成人高潮片免费视频| 捆绑调教一区二区三区| 国产精品91久久| 精品成人av一区二区在线播放| 欧美精品一线| 不卡av在线播放| 免费成人深夜蜜桃视频| 精品日韩免费| 国产午夜精品一区二区三区| 熟女丰满老熟女熟妇| 国产一区二区三区亚洲| 精品欧美乱码久久久久久1区2区| 色一情一区二区| 999国产精品亚洲77777| 日本高清成人免费播放| 国产精品人人妻人人爽人人牛| 色是在线视频| 狠狠色狠狠色综合日日五| 欧美日本视频在线观看| 三级在线观看视频| 色婷婷精品久久二区二区蜜臀av | 国产探花在线观看视频| 国产精品久久久久久妇女| 在线国产电影不卡| 色哟哟精品视频| 日韩精品三区| 欧美网站大全在线观看| 亚洲成人福利在线观看| 精品视频一区二区三区四区五区| 一本到一区二区三区| 欧美 日韩精品| 吉吉日韩欧美| 欧美在线观看视频一区二区| 日韩av片网站| 成人黄色图片网站| 欧美精品免费视频| 涩多多在线观看| 91嫩草精品| 亚洲精品97久久| 亚洲成人网在线播放| 日韩精品永久网址| 久久国产精品久久久久| 久久精品免费av| 亚洲综合99| 国产精品久久久久久搜索 | 欧美极品另类| 一区二区三区美女| 欧美a v在线播放| 成人性教育av免费网址| 欧美男同性恋视频网站| 在线播放av网址| 日韩极品在线| 这里只有精品在线播放| 国产一二三四区| 一区二区国产精品| 国产精品视频地址| av中文字幕免费| 91毛片在线观看| 一本色道久久99精品综合| 黑人极品ⅴideos精品欧美棵| 欧美日韩国产中字| 亚洲怡红院在线| 久久免费视频66| 深夜精品寂寞黄网站在线观看| 草视频在线观看| 久久激情中文| 96国产粉嫩美女| 欧洲毛片在线| 亚洲精品网站在线观看| 国产精品亚洲αv天堂无码| 综合久久av| 日韩美女av在线| 少妇久久久久久被弄高潮| 日韩成人免费电影| 国产欧美综合精品一区二区| 一级日本在线| 精品magnet| 亚洲五月激情网| 欧美一区二区三区高清视频| 欧美激情综合色| 中文字幕黄色av| 91蜜桃网址入口| www.日本在线视频| 一级欧美视频| 国产亚洲视频在线观看| 在线免费观看毛片| 国产一区视频在线看| 日韩精品久久久免费观看| bl在线肉h视频大尺度| 欧美高清一级片在线| 国产三级av在线播放| 怡红院精品视频在线观看极品| 国产精品久久一区主播| 涩涩视频在线观看免费| 亚洲欧美怡红院| 在线视频日韩一区| 蜜桃a∨噜噜一区二区三区| 久久久久久综合网天天| 国产后入清纯学生妹| 国产精品国产精品国产专区不蜜 | 欧美亚洲国产日本| 亚洲经典一区二区三区| 亚洲人成影院在线观看| 五月婷婷六月合| 国产欧美日韩视频在线| 欧美一区二区大胆人体摄影专业网站| www五月婷婷| 亚洲女同女同女同女同女同69| 国产小视频精品| 欧美色图一区| 国产精品久久久久久久久久| 国产在线小视频| 91国产成人在线| 中文字幕 自拍| 久久av最新网址| 久久久久资源| 韩国美女久久| 亚洲免费影视第一页| 久久国产精品免费看| 91在线观看高清| 99精品人妻少妇一区二区 | av大片在线播放| 色综合色狠狠综合色| 国产特黄级aaaaa片免| 六月婷婷一区| 日韩精品久久一区| 亚洲美女色播| 欧美精品久久久久久久久久| 黄色片一区二区| 精品久久久国产精品999| 野花社区视频在线观看| 日韩专区一卡二卡| 中文字幕黄色大片| 亚洲一区二区三区四区电影| 欧美极品第一页| 天堂网在线中文| 在线一区二区观看| 中文字幕美女视频| 国产不卡在线播放| 国产网站免费在线观看| 欧美精品尤物在线观看 | 日韩08精品| 久久久久久这里只有精品| 水莓100国产免费av在线播放| 一本一本大道香蕉久在线精品| 四虎成人免费影院| 国产精品18久久久久久vr| av免费观看大全| 精品色999| 99国产在线视频| 在线看片国产福利你懂的| 中文字幕不卡av| 国产黄色片免费观看| 婷婷综合五月天| 久久久国产一级片| 国产91丝袜在线播放九色| 97成人在线观看视频| 999精品在线| 好吊色欧美一区二区三区| 国产精品久久久久久吹潮| 久久久久久久久国产精品| 国产综合在线观看| 日韩精品一区国产麻豆| 国产精品久久久久久久久夜色| 亚洲精品成人a在线观看| 中文字幕av网址| 美女脱光内衣内裤视频久久网站 | 69久久夜色精品国产7777| 成人在线观看一区| 亚洲电影免费观看高清| 国产又粗又猛又爽又黄的视频一| 黄色成人av在线| 日本黄色片免费观看| 久久久精品综合| 成人三级做爰av| 日本不卡高清视频| 91成人在线观看喷潮教学| 99久久综合狠狠综合久久aⅴ| 国产原创精品| vam成人资源在线观看| 日本精品一区二区三区在线播放视频| 日日夜夜天天综合入口| 色婷婷综合久久久久中文字幕1| 头脑特工队2在线播放| 日韩欧美中文字幕一区| 一级片视频免费| 色域天天综合网| 日韩毛片在线播放| 一区二区三区成人| 日韩高清dvd碟片| 国产精品毛片久久久久久| av女人的天堂| 91丨porny丨在线| 人妻互换一二三区激情视频| 久久精品99国产国产精| 欧美精品色婷婷五月综合| 欧美午夜不卡影院在线观看完整版免费| 一本久久a久久精品vr综合| 精品美女久久久| 欧美日韩国产精品一卡| 美女扒开腿让男人桶爽久久动漫| 91视频免费在线观看| 久久99精品久久久野外观看| 国产日韩在线看| а√天堂资源国产精品| 国产精品电影网| 日韩不卡免费高清视频| 人九九综合九九宗合| 这里有精品可以观看| 2020国产精品视频| 最新欧美色图| 国产成人高清激情视频在线观看| 黑人巨大精品欧美一区二区桃花岛| 91精品国产91久久| 日韩在线伦理| 国产成人自拍视频在线观看| 美女一区网站| 国产成人综合精品| jizz亚洲女人高潮大叫| 91精品久久久久久| 国产美女精品视频免费播放软件| 亚洲最大av网站| 综合激情五月婷婷| 激情小说综合网| 宅男在线一区| 亚洲精品在线视频观看| 911久久香蕉国产线看观看| 成人在线免费观看网址| 国精品一区二区| 黄色动漫网站入口| 免费日本视频一区| 一级 黄 色 片一| 成人免费av网站| 欧美熟妇一区二区| 国产精品视频一二三区 | av亚洲免费| 麻豆md0077饥渴少妇| 亚洲国产电影| 成人3d动漫一区二区三区| 极品少妇一区二区| 久久精品无码专区| 久久久久国产精品麻豆ai换脸 | 97人人做人人爽香蕉精品| 成人在线视频网站| 91成人精品在线| 欧美xxxx黑人又粗又长精品| 色97色成人| 一本大道东京热无码aⅴ| 亚洲少妇一区| 中文字幕在线观看日| 成人精品一区二区三区四区| 高潮毛片无遮挡| 亚洲欧美经典视频| 久久99国产综合精品免费| 欧美日韩精品免费观看视频| 午夜精品久久久久久久99老熟妇| 亚洲男人第一av网站| 好了av在线| 26uuu久久噜噜噜噜| 99久久999| 免费精品视频一区二区三区| 亚洲精品成人影院| 久久久久狠狠高潮亚洲精品| 国产黄人亚洲片| 国产精品av久久久久久无| 男人的天堂官网| 亚洲va在线va天堂| 国产免费不卡视频| 亚洲日本成人女熟在线观看| 羞羞视频在线观看不卡| 国产精品吹潮在线观看| 福利在线一区| 伊人情人网综合| 性色一区二区三区| 亚洲美女精品视频| 中文字幕中文乱码欧美一区二区 | 国产精品探花在线播放| 久久精品免视看| 国产精品成人国产乱| 欧美精三区欧美精三区| 国产香蕉视频在线看| 69**夜色精品国产69乱| youjizzjizz亚洲| 国产精品av免费| 日韩电影一区二区三区四区| 日本一级片在线播放| 一区二区三区美女| 国产精品久久免费| 在线不卡国产精品| 不卡福利视频| 精品国产一区二区三区麻豆小说 | 综合136福利视频在线| 午夜伦理福利在线| 国产一区视频观看| 韩国av一区| 古装做爰无遮挡三级聊斋艳谭| 国产精品日韩精品欧美在线| 伦av综合一区| 日韩福利在线播放| 91超碰在线| 国产精品xxx在线观看www| 国产精品99免费看| 亚洲天堂小视频| 亚洲欧美日韩国产综合| 国产精品久久久久久久成人午夜| 在线精品高清中文字幕| 在线日本欧美| 午夜精品区一区二区三| 日韩—二三区免费观看av| 欧美黄色激情视频| 欧美性猛交xxxx黑人交| 超碰免费在线观看| 国产在线98福利播放视频| 日韩一区二区在线免费| www.国产福利| 亚洲乱码国产乱码精品精可以看 | 成人系列视频| 99热这里只有精品在线播放| 国产日韩亚洲欧美综合| 中国a一片一级一片| 最近2019中文免费高清视频观看www99 | 亚洲午夜久久久影院伊人| 精品在线视频一区| 我要看黄色一级片| 欧美一级二级三级乱码| 黄页网站在线| 精品一区2区三区| 久久精品人人| 天堂网av2018| 日韩欧美一二区| 91超碰在线| 日本一区高清不卡| 久久国产精品99久久人人澡| 顶臀精品视频www| 精品国产伦一区二区三区观看体验 | av爱爱亚洲一区| 日日夜夜狠狠操| 日韩在线欧美在线国产在线| 91精品麻豆| 激情小视频网站| 久久久久一区二区三区四区| 中文字幕av在线免费观看| 美女黄色丝袜一区| 人人香蕉久久| 色婷婷成人在线| 一区二区在线看| 色播色播色播色播色播在线| 国产精品日日做人人爱 | 国产3p露脸普通话对白| 久久久精品综合| 午夜精品久久久久久久爽| 欧美一级大片在线免费观看| 日韩在线观看一区 | 天天综合中文字幕| 99精品视频中文字幕| 一本久道久久综合无码中文| 欧美激情国产精品|