溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Flink的常見(jiàn)問(wèn)題診斷思路是什么

發(fā)布時(shí)間:2022-01-04 15:20:08 來(lái)源:億速云 閱讀:116 作者:柒染 欄目:大數(shù)據(jù)

Flink的常見(jiàn)問(wèn)題診斷思路是什么,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

1.常見(jiàn)運(yùn)維問(wèn)題

1.1 作業(yè)運(yùn)行環(huán)境

文中介紹的作業(yè)運(yùn)行環(huán)境主要是在阿里巴巴集團(tuán)內(nèi),構(gòu)建在 Hadoop 生態(tài)之上的 Flink 集群,包含 Yarn、HDFS、ZK 等組件;作業(yè)提交模式采用 yarn per-job Detached 模式。

Flink的常見(jiàn)問(wèn)題診斷思路是什么

  • 第1步,作業(yè)提交是通過(guò) Flink Yarn Client,將用戶所寫(xiě)的作業(yè)代碼以及編譯好的 jar 包上傳到 HDFS 上;

  • 第2步 Flink Client 與 Yarn ResourceManager 進(jìn)行通信,申請(qǐng)所需要的的 Container 資源;

  • 第3步,ResourceManager 收到請(qǐng)求后會(huì)在集群中的 NodeManager 分配啟動(dòng) AppMaster 的 Container 進(jìn)程,AppMaster 中包含 Flink JobManager 模塊和 Yarn 通信的 ResourceManager 模塊;

  • 第4步,在 JobManager 中根據(jù)作業(yè)的 JobGraph 生成 Execution Graph,ResourceManager 模塊向 Yarn 的 ResourceManager 通信,申請(qǐng) TaskManager 需要的 container 資源,這些 container 由 Yarn 的 NodeManger 負(fù)責(zé)拉起。每個(gè) NodeManager 從 HDFS 上下載資源,啟動(dòng) Container(TaskManager),并向 JobManager 注冊(cè);JobManger 會(huì)部署不同的 task 任務(wù)到各個(gè) TaskManager 中執(zhí)行。

■ 資源申請(qǐng)方式

  1. 指定資源大小
    提交時(shí),指定每個(gè) TaskManager、JobManager 使用多少內(nèi)存,CPU 資源。

  2. 細(xì)粒度資源控制
    阿里巴巴集團(tuán)內(nèi)主要采用 ResourceSpec 方式指定每個(gè) Operator 所需的資源大小,依據(jù) task 的并發(fā)聚合成 container 資源向 Yarn 申請(qǐng)。

■  環(huán)境高可用

  1. JM 高可用,AppMaster(JobManager) 異常后,可以通過(guò) Yarn 的 APP attempt 與 ZooKeeper 機(jī)制來(lái)保證高可用;

  2. 數(shù)據(jù)高可用,作業(yè)做 checkpoint 時(shí),TaskManager 優(yōu)先寫(xiě)本地磁盤(pán),同時(shí)異步寫(xiě)到 HDFS;當(dāng)作業(yè)再次啟動(dòng)時(shí)可以從 HDFS 上恢復(fù)到上次 checkpoint 的點(diǎn)位繼續(xù)作業(yè)流程。

1.2 為什么我的作業(yè)延時(shí)了?

■ 時(shí)間類(lèi)型

  • Processing time
    Processing time 是指 task 處理數(shù)據(jù)時(shí)所在機(jī)器的系統(tǒng)時(shí)間

  • Event time
    Event time 是指數(shù)據(jù)當(dāng)中某一數(shù)據(jù)列的時(shí)間

  • Ingestion time
    Ingestion time 是指在 flink source 節(jié)點(diǎn)收到這條數(shù)據(jù)時(shí)的系統(tǒng)系統(tǒng)時(shí)間

■ 延時(shí)定義

自定義 Source 源解析中加入 Gauge 類(lèi)型指標(biāo)埋點(diǎn),匯報(bào)如下指標(biāo):

  1. 記錄最新的一條數(shù)據(jù)中的 event time,在匯報(bào)指標(biāo)時(shí)使用當(dāng)前系統(tǒng)時(shí)間 - event time。

  2. 記錄讀取到數(shù)據(jù)的系統(tǒng)時(shí)間-數(shù)據(jù)中的 event time,直接匯報(bào)差值。

delay = 當(dāng)前系統(tǒng)時(shí)間 – 數(shù)據(jù)事件時(shí)間(event time) 

說(shuō)明:反應(yīng)處理數(shù)據(jù)的進(jìn)度情況。

fetch_delay = 讀取到數(shù)據(jù)的系統(tǒng)時(shí)間- 數(shù)據(jù)事件時(shí)間(event time)

說(shuō)明:反應(yīng)實(shí)時(shí)計(jì)算的實(shí)際處理能力。

■ 延時(shí)分析

Flink的常見(jiàn)問(wèn)題診斷思路是什么

  • 從上游源頭,查看每個(gè)源頭并發(fā)情況

  • 是否上游數(shù)據(jù)稀疏導(dǎo)致

  • 作業(yè)性能問(wèn)題

1.3 為什么我的作業(yè) failover 了?

■ 作業(yè) failover 主要分為兩大類(lèi)

Flink的常見(jiàn)問(wèn)題診斷思路是什么

Flink Failover 主要有兩類(lèi),一類(lèi)是 Job ManagerFailover,還有一類(lèi)是 Task ManagerFailover。

1.4 作業(yè)無(wú)法提交、異常停止

■ 無(wú)法提交

  • Yarn 問(wèn)題 – 資源限制

  • HDFS 問(wèn)題 - Jar 包過(guò)大,HDFS 異常

  • JobManager 資源不足,無(wú)法響應(yīng) TM 注冊(cè)

  • TaskManager 啟動(dòng)過(guò)程中異常

■ 異常停止-指標(biāo)監(jiān)控?zé)o法覆蓋

  • 重啟策略配置錯(cuò)誤

  • 重啟次數(shù)達(dá)到上限

2.處理方式

2.1 延時(shí)問(wèn)題處理方式

Flink的常見(jiàn)問(wèn)題診斷思路是什么

  • 通過(guò) delay、fetch_delay 判斷是否上游稀疏導(dǎo)致延時(shí)或者作業(yè)性能不足導(dǎo)致延時(shí)

  • 確定延時(shí)后,通過(guò)反壓分析,找到反壓節(jié)點(diǎn)

  • 分析反壓節(jié)點(diǎn)指標(biāo)參數(shù)

  • 通過(guò)分析 JVM 進(jìn)程或者堆棧信息

  • 通過(guò)查看 TaskManager 等日志

■ 延時(shí)與吞吐

Flink的常見(jiàn)問(wèn)題診斷思路是什么

  • 觀察延時(shí)與 tps 指標(biāo)之間關(guān)聯(lián),是否由于 tps 的異常增高,導(dǎo)致作業(yè)性能不足延時(shí)

■ 反壓

  • 找到反壓的源頭。

  • 節(jié)點(diǎn)之間的數(shù)據(jù)傳輸方式 shuffle/rebalance/hash。

  • 節(jié)點(diǎn)各并發(fā)的吞吐情況,反壓是不是由于數(shù)據(jù)傾斜導(dǎo)致。

  • 業(yè)務(wù)邏輯,是否有正則,外部系統(tǒng)訪問(wèn)等。IO/CPU 瓶頸,導(dǎo)致節(jié)點(diǎn)的性能不足。

■ 指標(biāo)

Flink的常見(jiàn)問(wèn)題診斷思路是什么

  • GC 耗時(shí)多長(zhǎng)

  • 短時(shí)間內(nèi)多次 GC

  • state 本地磁盤(pán)的 IO 情況

  • 外部系統(tǒng)訪問(wèn)延時(shí)等等

■ 堆棧

在 TaskManager 所在節(jié)點(diǎn),查看線程 TID、CPU 使用情況,確定是 CPU,還是 IO 問(wèn)題。


ps H -p ${javapid} -o user,pid,ppid,tid,time,%cpu,cmd
#轉(zhuǎn)換為16進(jìn)制后查看tid具體堆棧jstack ${javapid} > jstack.log

■ 常見(jiàn)處理方式

Flink的常見(jiàn)問(wèn)題診斷思路是什么

  1. 增加反壓節(jié)點(diǎn)的并發(fā)數(shù)。

  2. 調(diào)整節(jié)點(diǎn)資源,增加 CPU,內(nèi)存。

  3. 拆分節(jié)點(diǎn),將 chain 起來(lái)的消耗資源較多的 operator 拆分。

  4. 作業(yè)或集群優(yōu)化,通過(guò)主鍵打散,數(shù)據(jù)去重,數(shù)據(jù)傾斜,GC 參數(shù),Jobmanager 參數(shù)等方式調(diào)優(yōu)。

2.2 作業(yè) failover 分析

Flink的常見(jiàn)問(wèn)題診斷思路是什么

  • 查看作業(yè) failover 時(shí)打印的一些日志信息

  • 查看 failover 的 Subtask 找到所在 Taskmanager 節(jié)點(diǎn)

  • 結(jié)合 Job/Taskmanager 等日志信息

  • 結(jié)合 Yarn 和 OS 等相關(guān)日志

3.作業(yè)生命周期

3.1 作業(yè)狀態(tài)變化-JobStatus

Flink的常見(jiàn)問(wèn)題診斷思路是什么

上圖中可以看到作業(yè)的整個(gè)狀態(tài)轉(zhuǎn)換。從作業(yè)創(chuàng)建、到運(yùn)行、失敗,重啟,成功等整個(gè)生命周期。

這里需要注意的是 reconciling 的狀態(tài),這個(gè)狀態(tài)表示 yarn 中 AppMaster 重新啟動(dòng),恢復(fù)其中的 JobManager 模塊,這個(gè)作業(yè)會(huì)從 created 進(jìn)入到 reconciling 的狀態(tài),等待其他 Taskmanager 匯報(bào),恢復(fù) JobManager 的 failover,然后從 reconciling 再到正常 running。

3.2 Task 狀態(tài)變化 -ExecutionState

Flink的常見(jiàn)問(wèn)題診斷思路是什么

上圖是作業(yè)的 Task 狀態(tài)轉(zhuǎn)換,需要注意的是,作業(yè)狀態(tài)處于 running 狀態(tài)時(shí),并不意味著作業(yè)一定在運(yùn)行消費(fèi)信息。在流式計(jì)算中只有等所有的 task 都在 running 時(shí),作業(yè)才算真正運(yùn)行。

通過(guò)記錄作業(yè)各個(gè)階段的狀態(tài)變化,形成生命周期,我們能很清楚地展示作業(yè)是什么時(shí)候開(kāi)始運(yùn)行、什么時(shí)候失敗,以及 taskmanager failover 等關(guān)鍵事件,進(jìn)一步能分析出集群中有多少個(gè)作業(yè)正在運(yùn)行,形成 SLA 標(biāo)準(zhǔn)。

4.工具化經(jīng)驗(yàn)

4.1 指標(biāo)

Flink的常見(jiàn)問(wèn)題診斷思路是什么

如何去衡量一個(gè)作業(yè)是否正常?

  • 延時(shí)與吞吐
    對(duì)于 Flink 作業(yè)來(lái)說(shuō),最關(guān)鍵的指標(biāo)就是延時(shí)和吞吐。在多少 TPS 水位的情況下,作業(yè)才會(huì)開(kāi)始延時(shí).

  • 外部系統(tǒng)調(diào)用
    從指標(biāo)上還可以建立對(duì)外部系統(tǒng)調(diào)用的耗時(shí)統(tǒng)計(jì),比如說(shuō)維表 join,sink 寫(xiě)入到外部系統(tǒng)需要消耗多少時(shí)間,有助于我們排除外部的一些系統(tǒng)異常的一些因素。

  • 基線管理
    建立指標(biāo)基線管理。比如說(shuō) state 訪問(wèn)耗時(shí),平時(shí)沒(méi)有延時(shí)的時(shí)候,state 訪問(wèn)耗時(shí)是多少?每個(gè) checkpoint 的數(shù)據(jù)量大概是多少?在異常情況下,這些都有助于我們對(duì) Flink 的作業(yè)的問(wèn)題進(jìn)行排查。

4.2 日志

Flink的常見(jiàn)問(wèn)題診斷思路是什么

  • 錯(cuò)誤日志
    JobManager 或者 TaskManager 的關(guān)鍵字及錯(cuò)誤日志報(bào)警。

  • 事件日志
    JobManager 或者 TaskManager 的狀態(tài)變化形成關(guān)鍵事件記錄。

  • 歷史日志收集
    當(dāng)作業(yè)結(jié)束后,想要分析問(wèn)題,需要從 Yarn 的 History Server 或已經(jīng)采集的日志系統(tǒng)中找歷史信息。

  • 日志分析
    有了 JobManager,TaskManager 的日志之后,可以對(duì)常見(jiàn)的 failover 類(lèi)型進(jìn)行聚類(lèi),標(biāo)注出一些常見(jiàn)的 failover,比如說(shuō) OOM 或者一些常見(jiàn)的上下游訪問(wèn)的錯(cuò)誤等等。

4.3 關(guān)聯(lián)分析

  1. 作業(yè)指標(biāo)/事件 - Taskmanager,JobManager

  2. Yarn 事件 - 資源搶占,NodeManager Decommission

  3. 機(jī)器異常 - 宕機(jī)、替換

  4. Failover 日志聚類(lèi)

在做了這些指標(biāo)和日志的處理之后,可以對(duì)各組件的事件進(jìn)行關(guān)聯(lián),比如說(shuō)當(dāng) TaskManager failover 時(shí),有可能是因?yàn)闄C(jī)器的異常。也可以通過(guò) Flink 作業(yè)解析 Yarn 的事件,關(guān)聯(lián)作業(yè)與 Container 資源搶占,NodeManager 下線的事件等。

關(guān)于Flink的常見(jiàn)問(wèn)題診斷思路是什么問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI