本文為您介紹Flink全託管支援的監控指標詳情。
注意事項
CloudMonitor與Flink控制台資料差異說明
-
展示維度差異
Flink 控制台通過 PromQL 查詢,僅展示最大延遲。這是因為在Realtime Compute情境中,平均延遲極易掩蓋資料扭曲或單分區阻塞等嚴重問題,僅最大延遲具備營運參考價值。 -
數值偏差
CloudMonitor採用預彙總機制計算指標。由於彙總視窗、採樣時間點或計算邏輯的差異,CloudMonitor顯示的“最大值”可能與 Flink 控制台展示的即時數值存在細微不一致。建議排查問題時以 Flink 控制台資料為準。
資料延遲與Watermark 配置的說明
-
延遲計算邏輯
當前的監控指標 Emit Delay 是基於事件時間(Event Time)計算的,具體公式為:Delay = 當前系統時間 - 資料體中的邏輯時間欄位(如 PriceData.time)
這意味著該指標反映的是“資料的新鮮度”,而非“系統的處理速度”。只要資料本身是舊的,或者系統為了等待水位線(Watermark)對齊而主動暫停輸出,該指標都會偏高。
-
調整建議
情境一:業務強依賴 Watermark(需保證計算邏輯正確),但資料來源本身較舊
-
典型情況:
-
上遊資料發送本身就有延遲(如埋點上報慢)。
-
進行中歷史資料回溯/重跑(Backfill),處理的是昨天的資料。
-
商務邏輯必須依賴 Watermark 解決亂序問題,不能關掉。
-
-
現象: 監控警示延遲很高,但 Kafka 消費組無積壓(Lag ≈ 0),CPU 負載低。
-
建議:
-
忽略此延遲指標: 此時的高 Delay 是正常的業務表現(反映資料是舊的),不代表系統故障。
-
更換監控口徑: 請營運人員轉為監控 Kafka Consumer Lag(消費堆積量)。只要堆積量不持續上漲,就證明系統處理能力完全正常,無需介入。
-
情境二:追求即時性,且可以容忍少量亂序/資料丟失
-
典型情況:
-
大屏展示或即時風控,資料由於 Watermark 等待導致結果輸出過慢。
-
業務上更在乎“當前幾點收到的資料”,而不是“資料裡寫的幾點”。
-
-
現象: 資料流本身是即時的,但因為 Watermark 設定了較大的容忍視窗(如允許遲到10秒),導致資料被強行延遲10秒才輸出。
-
建議:
-
移除/關閉 Watermark: 改用處理時間(Processing Time)進行計算,或將 Watermark 的等待閾值設為 0。
-
預期結果: 延遲指標將瞬間下降(接近物理處理耗時),資料隨到隨出,不再等待對齊。
-
-
典型情境指標特徵
指標僅反映當前組件的工作狀態,並非判斷問題根因的充分條件。請務必結合 Flink UI 的反壓檢測功能及其他協助工具輔助進行綜合判斷。
1. 運算元反壓
現象:下遊處理能力不足,導致 Source 發送速率下降。
-
判斷方式:首選 Flink UI 的反壓監測面板。
-
指標特徵:
-
sourceIdleTime 呈周期性上升。
-
currentFetchEventTimeLag 和 currentEmitEventTimeLag 持續增長。
-
極端情況:若運算元完全卡死,sourceIdleTime 會持續上升。
-
2. Source 效能瓶頸
現象:Source 讀取速度達到上限,但仍無法滿足資料處理需求。
-
判斷方式:作業中未檢測到反壓。
-
指標特徵:
-
sourceIdleTime 維持在極低數值(Source 處於全負荷工作狀態)。
-
currentFetchEventTimeLag 和 currentEmitEventTimeLag 數值接近,且均處於高位。
-
3. 資料扭曲或空分區
現象:上遊 Kafka 分區資料分布不均,或存在空分區。
-
判斷方式:觀察不同 Source 的指標差異。
-
指標特徵:
-
特定 Source 的 sourceIdleTime 顯著高於其他 Source(表明該並行度處於閑置狀態)。
-
4. 資料延遲分析
現象:作業整體延遲較高,需定位瓶頸位於 Source 內部還是外部系統。
-
判斷方式:組合分析空閑時間、Lag 差值與堆積量。
-
指標特徵:
-
sourceIdleTime 較高:
說明 Source 處於閑置狀態。通常意味著外部系統的資料產出速率較低,而非 Flink 處理慢。 -
Lag 差值分析:
對比 currentEmitEventTimeLag 與 currentFetchEventTimeLag 的數值差異(即資料在 Source 運算元內的駐留時間):-
差值較小(兩指標接近):拉取能力不足。瓶頸在於網路 I/O 頻寬或 Source 並發度不夠。
-
差值較大:處理能力不足。瓶頸在於資料解析效率低下,或受到下遊反壓限制。
-
-
pendingRecords(如連接器支援):
直接反映外部滯留量。數值越高,說明資料在外部系統中的堆積越嚴重。
-
概覽
|
指標 |
含義 |
詳情 |
單位 |
支援的連接器 |
|
Num of Restarts |
作業錯誤恢複次數。 |
作業出錯重啟次數,不包含JM Failover次數。查看作業可用性,協助您查看作業狀態。 |
次數 |
不涉及 |
|
current Emit Event Time Lag |
業務延時。 |
該延時較大時,說明作業可能在拉取資料或者處理資料上存在延時。 |
毫秒(ms) |
|
|
current Fetch Event Time Lag |
傳輸延時。 |
該延時較大時,說明作業可能在拉取資料上存在延時。您需要查看網路I/O或上遊系統情況。結合currentEmitEventTimeLag,您可以通過兩個指標的差值(即資料在Source中停留的時間)分析Source當前的處理能力。詳情如下:
|
毫秒(ms) |
|
|
numRecordsIn |
所有Operator的輸入的記錄總數。 |
如果某個運算元的numRecordsIn值長時間未增漲,可能存在上遊把資料都吞掉的情況,需要查看上遊資料。 |
條 |
所有內建連接器均支援。 |
|
numRecordsOut |
輸出記錄總數。 |
如果某個運算元的numRecordsOut的值長時間未增漲,說明可能是作業代碼邏輯錯誤,導致資料都被吞掉了,需要查看作業代碼邏輯。 |
條 |
所有內建連接器均支援。 |
|
numRecordsInofSource |
每個Operator中僅source operator的輸入記錄。 |
查看上遊資料輸入情況。 |
條 |
|
|
numRecordsOutOfSink |
Sink端輸出記錄總數。 |
查看上遊資料輸出情況。 |
條 |
|
|
numRecordsInPerSecond |
整個資料流每秒鐘輸入的記錄數。 |
用於需要監控整個資料流的處理速度的情境。例如,您可以使用numRecordsInPerSecond來觀察整個資料流的處理速度是否達到了預期的水平,以及在不同的輸入資料負載下效能的變化情況。 |
條/秒 |
所有內建連接器均支援。 |
|
numRecordsOutPerSecond |
整個資料流每秒鐘輸出的記錄數。 |
用於測量整個資料流每秒鐘輸出的記錄數,適用於需要監控整個資料流的輸出速度的情境。 例如,您可以使用numRecordsOutPerSecond來觀察整個資料流的輸出速度是否達到了預期的水平,以及在不同的輸出資料負載下效能的變化情況。 |
條/秒 |
所有連接器均支援。 |
|
numRecordsInOfSourcePerSecond (IN RPS) |
資料來源Source端每秒輸入記錄數。 |
用於測量每個資料來源每秒鐘產生的記錄數,適用於需要瞭解每個資料來源的產生速度的情境。例如,在一個資料流中,不同的資料來源可能會產生不同數量的記錄,使用numRecordsInOfSourcePerSecond可以協助您瞭解每個資料來源的產生速度,並對資料流進行調整以達到更好的效能,同時該資料用於監控警示。 如果該值為0,說明可能存在上遊把資料都吞掉的情況,需要查看上遊資料是否一直未被消費,導致輸出阻塞。 |
條/秒 |
|
|
numRecordsOutOfSinkPerSecond (OUT RPS) |
資料目的Sink端每秒輸出記錄數。 |
用於測量每個Sink端每秒鐘輸出的記錄數,適用於需要瞭解每個Sink的輸出速度的情境。例如,在一個資料流中,不同的Sink可能會輸出不同數量的記錄。 使用numRecordsOutOfSinkPerSecond可以協助您瞭解每個Sink的輸出速度,並對資料流進行調整以達到更好的效能。該資料用於監控警示,如果該值為0,說明可能是作業代碼邏輯錯誤,導致全部資料被過濾了,需要查看作業代碼邏輯。 |
條/秒 |
|
|
pendingRecords |
源端未讀取資料的條數。 |
外部系統中尚未被Source拉取的資料條數。 |
條 |
|
|
sourceIdleTime |
源端未處理資料的時間。 |
該指標反映Source是否有閑置。如果該指標的值較大時,說明您的資料在外部系統中的產生速率較低。 |
毫秒(ms) |
|
|
busyTimePerSecond |
Task 繁忙時間。 |
每秒內 Task 線程處於繁忙狀態(處理資料)的毫秒數。取值範圍 0~1000,值越高表示 Task 負載越大。可用於識別效能瓶頸、評估資源使用率和指導自動調優。 |
毫秒(ms) |
不涉及 |
系統檢查點
|
指標 |
含義 |
詳情 |
單位 |
|
Num of Checkpoints |
Checkpoint數量。 |
總覽Checkpoint狀態,協助您設定Checkpoint警示。 |
個 |
|
lastCheckpointDuration |
最近一個Checkpoint的期間。 |
如果Checkpoint耗時過長或者逾時,可能由於狀態過大、臨機操作網路原因、Barrier未對齊或者資料存在反壓等原因造成。 |
毫秒(ms) |
|
lastCheckpointSize |
最近一個Checkpoint的大小。 |
最近一次實際上傳的Checkpoint大小,可以在Checkpoint有瓶頸時協助分析Checkpoint效能。 |
Bytes |
狀態
latency狀態指標需要設定後才可以使用,因此您需要在更多Flink配置中設定state.backend.latency-track.keyed-state-enabled: true,啟用latency狀態指標後,可能會對作業運行時的效能造成一定影響。
|
指標 |
含義 |
詳情 |
單位 |
版本限制 |
|
State Clear Latency |
單次狀態清理延遲最大值。 |
查看State清理的效能。 |
納秒(ns) |
Realtime Compute引擎VVR 4.0.0及以上版本。 |
|
Value State Latency |
單次Value State訪問延遲的最大值。 |
查看Value State訪問的效能。 |
納秒(ns) |
|
|
Aggregating State Latency |
單次Aggregating State訪問延遲的最大值。 |
查看Aggregating State訪問的效能。 |
納秒(ns) |
|
|
Reducing State Latency |
單次Reducing State訪問延遲的最大值。 |
查看Reducing State訪問的效能。 |
納秒(ns) |
|
|
Map State Latency |
單次Map State訪問延遲的最大值。 |
查看Map State訪問的效能。 |
納秒(ns) |
|
|
List State Latency |
單次List State訪問延遲的最大值。 |
查看List State訪問的效能。 |
納秒(ns) |
|
|
Sorted Map State Latency |
單次Sorted Map State訪問延遲的最大值。 |
查看Sorted Map State訪問的效能。 |
納秒(ns) |
|
|
State Size |
狀態資料的大小。 |
通過觀測該指標,您可以:
|
Bytes |
Realtime Compute引擎VVR 4.0.12及以上版本。 |
|
State File Size |
狀態資料檔案的大小。 |
通過觀測該指標,您可以:
|
Bytes |
Realtime Compute引擎VVR 4.0.13及以上版本。 |
IO
|
指標 |
含義 |
詳情 |
單位 |
支援的連接器 |
|
numBytesIn |
輸入位元組總數。 |
查看上遊吞吐的輸入情況,協助您觀察作業流量表現。 |
Bytes |
|
|
numBytesInPerSecond |
每秒輸入位元組總數。 |
查看上遊流速的輸入情況,協助您觀察作業流量表現。 |
Bytes/秒 |
|
|
numBytesOut |
輸出位元組總數。 |
查看上遊吞吐的輸出情況,協助您觀察作業流量表現。 |
Bytes |
|
|
numBytesOutPerSecond |
每秒輸出位元組總數。 |
查看上遊吞吐輸出情況,協助您觀察作業流量表現。 |
Bytes/秒 |
|
|
Task numRecords I/O |
每個Subtask收到和輸出的總資料量。 |
根據該指標判斷作業是否存在I/O瓶頸。 |
條 |
|
|
Task numRecords I/O PerSecond |
每個Subtask每秒收到和輸出的總資料量。 |
判斷作業是否存在I/O瓶頸並且通過速率判斷嚴重程度。 |
條/秒 |
|
|
currentSendTime |
輸出到下遊系統的每個Subtask發送最近一條資料的用時。 |
該指標值較小時,說明Subtask輸出過慢。 |
毫秒(ms) |
|
浮水印
|
指標 |
含義 |
詳情 |
單位 |
支援的連接器 |
|
Task InputWatermark |
每個Task收到最近一條浮水印的時間。 |
說明TM收到資料的延時情況。 |
無 |
不涉及連接器 |
|
watermarkLag |
Watermark延遲。 |
判斷Subtask層級的作業延遲情況。 |
毫秒(ms) |
|
CPU
|
指標 |
含義 |
詳情 |
單位 |
|
JM CPU Usage |
單個JM CPU的CPU使用率。 |
該值反映Flink對CPU時間片的佔用情況,1個Core的CPU用滿了就是100%,4個Core用滿了就是400%。如果該值長期大於100%則說明CPU很繁忙。如果負載很高,但CPU使用率卻比較低,可能因為頻繁的讀寫操作導致不可中斷睡眠狀態的進程過多。 說明
僅Realtime Compute引擎VVR 6.0.6及以上版本支援該指標。 |
無 |
|
TM CPU Usage |
單個TM CPU的CPU使用率。 |
該值反映Flink對CPU時間片的佔用情況,1個Core的CPU用滿了就是100%,4個Core用滿了就是400%。如果該值長期大於100%則說明CPU很繁忙。如果負載很高,但CPU使用率卻比較低,可能是因為頻繁的讀寫操作導致不可中斷睡眠狀態的進程過多。 |
無 |
記憶體
|
指標 |
含義 |
詳情 |
單位 |
|
JM Heap Memory |
JM的堆記憶體。 |
查看JM堆記憶體的變化。 |
Bytes |
|
JM NonHeap Memory |
JM的非堆記憶體。 |
查看JM非堆記憶體的變化。 |
Bytes |
|
TM Heap Memory |
TM的堆記憶體。 |
查看TM堆記憶體的變化。 |
Bytes |
|
TM nonHeap Memory |
TM的非堆記憶體。 |
查看TM非堆記憶體的變化。 |
Bytes |
|
TM Mem (RSS) |
通過Linux擷取整個進程的記憶體。 |
查看進程記憶體的變化。 |
Bytes |
JVM
|
指標 |
含義 |
詳情 |
單位 |
|
JM Threads |
JM線程數。 |
JM線程數過多會導致佔用過大的記憶體空間,從而降低作業穩定性。 |
個 |
|
TM Threads |
TM線程數。 |
TM線程數過多會導致佔用過多記憶體,從而降低作業穩定性。 |
個 |
|
JM GC Count |
JM GC次數。 |
GC次數過多會導致佔用過大記憶體空間,從而影響作業效能。該指標協助您進行作業診斷,排查作業層級的故障原因。 |
Times |
|
JM GC Time |
每次JM GC時間。 |
長時間GC會導致佔用過大記憶體空間,從而影響作業效能。該指標協助您進行作業診斷,排查作業層級的故障原因。 |
毫秒(ms) |
|
TM GC Count |
TM GC次數。 |
GC次數過多會導致佔用過大記憶體空間,從而影響作業效能。該指標協助您進行作業診斷,排查作業Task層級的故障原因。 |
次數 |
|
TM GC Time |
每次TM GC時間。 |
長時間GC會導致佔用過大記憶體空間,從而影響作業效能。該指標協助您進行作業診斷,排查作業層級的故障原因。 |
毫秒(ms) |
|
JM ClassLoader |
JM所在的JVM在建立後,載入或卸載的類總數。 |
JM所在的JVM建立後,載入類的總數或卸載類的總數過大,會導致佔用過大的記憶體空間,從而影響作業效能。 |
無 |
|
TM ClassLoader |
TM所在的JVM建立後,載入或卸載的類總數。 |
JM所在的JVM建立後載入類的總數或卸載類的總數過大,會導致佔用過大記憶體空間,從而影響作業效能。 |
無 |
連接器 - Mysql
|
指標 |
含義 |
單位 |
應用情境 |
版本限制 |
|
isSnapshotting |
作業是否在處理全量資料階段(1表示處於該階段) |
無 |
確定作業處理階段 |
Realtime Compute引擎VVR 8.0.9及以上版本。 |
|
isBinlogReading |
作業是否在處理增量資料階段(1表示處於該階段) |
無 |
確定作業處理階段 |
|
|
Num of remaining tables |
全量階段等待處理的表的個數 |
個 |
查看剩餘未處理的表數量 |
|
|
Num of snapshotted tables |
全量階段已經處理的表的個數 |
個 |
查看已經處理的表數量 |
|
|
Num of remaining SnapshotSplits |
全量階段等待處理的分區的個數 |
個 |
查看已經處理的分區數 |
|
|
Num of processed SnapshotSplits |
全量階段已經處理的分區的個數 |
個 |
查看未處理的分區數 |
|
|
currentFetchEventTimeLag |
資料從產生到從資料庫讀取出來之間的延遲 |
ms |
查看從資料庫讀取binlog的延遲 |
|
|
currentReadTimestampMs |
當前讀取到的最新資料的時間戳記 |
ms |
查看讀取到最新資料時間 |
|
|
numRecordsIn |
已經讀取的資料條數 |
條 |
查看已經處理的全部資料量 |
|
|
numSnapshotRecords |
全量階段已經處理的資料條數 |
條 |
查看全量階段已處理的資料量 |
|
|
numRecordsInPerTable |
每個表已經讀取的資料條數 |
條 |
查看每個表已經處理的全部資料量 |
|
|
numSnapshotRecordsPerTable |
每個表全量階段已經處理的資料條數 |
條 |
查看每個表全量階段已處理的資料量 |
連接器 - Kafka
|
指標 |
含義 |
單位 |
應用情境 |
版本限制 |
|
commitsSucceeded |
位點提交成功的次數 |
次 |
判斷位點提交是否成功 |
Realtime Compute引擎VVR 8.0.9及以上版本。 |
|
commitsFailed |
位點提交失敗的次數 |
次 |
判斷位點提交是否成功 |
|
|
Fetch Rate |
拉取資料的頻率 |
次/秒 |
判斷資料拉取的延遲和速度 |
|
|
Fetch Latency Avg |
拉取資料操作的延遲 |
毫秒 |
判斷資料拉取的延遲和速度 |
|
|
Fetch Size Avg |
每次拉取的平均位元組數 |
位元組 |
判斷資料拉取的延遲和速度 |
|
|
Avg Records In Per-Request |
每次拉取的平均訊息數 |
條 |
判斷資料拉取的延遲和速度 |
|
|
currentSendTime |
發送上一條記錄的時間 |
無 |
判斷消費進度 |
|
|
batchSizeAvg |
每個批次的平均位元組數 |
Bytes |
判斷資料寫入延遲和速度 |
|
|
requestLatencyAvg |
請求的平均延遲 |
ms |
判斷資料寫入延遲和速度 |
|
|
requestsInFlight |
進行中的請求數 |
無 |
判斷資料寫入延遲和速度 |
|
|
recordsPerRequestAvg |
每次請求的平均訊息數 |
條 |
判斷資料寫入延遲和速度 |
|
|
recordSizeAvg |
訊息的平均位元組數 |
Bytes |
判斷資料寫入延遲和速度 |
連接器 - Paimon
|
指標 |
含義 |
單位 |
應用情境 |
版本限制 |
|
Number of Writers |
Writer執行個體數量 |
個 |
當前有幾個分桶正在寫入。若數量過大,可能會影響寫入效率,增加記憶體消耗。分析分桶數或分區鍵設定是否合理。 |
Realtime Compute引擎VVR 8.0.9及以上版本。 |
|
Max Compaction Thread Busy |
小檔案合并線程的最大繁忙程度 |
比例 |
當前正在寫入的各個分桶中,最近一分鐘內,小檔案合并線程最多有多少時間在活動。可以反映小檔案合并的壓力 |
|
|
Average Compaction Thread Busy |
小檔案合并線程平均繁忙程度 |
比例 |
當前正在寫入的各個分桶中,最近一分鐘內,小檔案合并線程最多有多少時間在活動。可以反映小檔案合并的壓力 |
|
|
Max Number of Level 0 Files |
最大Level 0 檔案數量 |
個 |
當前正在寫入的各個分桶中,level 0檔案(小檔案)最多有幾個。僅對主鍵表有意義,可以反映小檔案合并的效率能否跟上寫入效率 |
|
|
Average Number of Level 0 Files |
平均Level 0 檔案數量 |
個 |
當前正在寫入的各個分桶中,level 0檔案(小檔案)平均有幾個。僅對主鍵表有意義,可以反映小檔案合并的效率能否跟上寫入效率 |
|
|
Last Commit Duration |
上次Commit耗時 |
毫秒 |
若時間太長,應檢查是否有過多的分桶正在同時寫入。 |
|
|
Number of Partitions Last Committed |
上次Commit中寫入的分區數量 |
個 |
若數量過大,可能會影響寫入效率,增加記憶體消耗。分析分桶數或分區鍵設定是否合理。 |
|
|
Number of Buckets Last Committed |
上次Commit中寫入的分桶數量 |
個 |
若數量過大,可能會影響寫入效率,增加記憶體消耗。分析分桶數或分區鍵設定是否合理。 |
|
|
Used Write Buffer |
已使用的Write Buffer的記憶體大小 |
位元組 |
所有task manager的writer節點已使用的buffer大小。該buffer將佔用Java堆記憶體,若設定過大可能會導致OOM。 |
|
|
Total Write Buffer |
分配給Write Buffer的總記憶體大小 |
位元組 |
所有task manager的writer節點設定的uffer大小。該buffer將佔用Java堆記憶體,若設定過大可能會導致OOM,。 |
資料攝入
|
指標 |
含義 |
單位 |
應用情境 |
版本限制 |
|
isSnapshotting |
作業是否在處理全量資料階段(1表示處於該階段) |
無 |
確定作業處理階段 |
Realtime Compute引擎VVR 8.0.9及以上版本。 |
|
isBinlogReading |
作業是否在處理增量資料階段(1表示處於該階段) |
無 |
確定作業處理階段 |
|
|
Num of remaining tables |
全量階段等待處理的表的個數 |
個 |
查看剩餘未處理的表數量 |
|
|
Num of snapshotted tables |
全量階段已經處理的表的個數 |
個 |
查看已經處理的表數量 |
|
|
Num of remaining SnapshotSplits |
全量階段等待處理的分區的個數 |
個 |
查看已經處理的分區數 |
|
|
Num of processed SnapshotSplits |
全量階段已經處理的分區的個數 |
個 |
查看未處理的分區數 |
|
|
currentFetchEventTimeLag |
資料從產生到從資料庫讀取出來之間的延遲 |
ms |
查看從資料庫讀取binlog的延遲 |
|
|
currentReadTimestampMs |
當前讀取到的最新資料的時間戳記 |
ms |
查看讀取到最新資料的時間 |
|
|
numRecordsIn |
已經讀取的資料條數 |
條 |
查看已經處理的全部資料量 |
|
|
numRecordsInPerTable |
每個表已經讀取的資料條數 |
條 |
查看每個表已經處理的全部資料量 |
|
|
numSnapshotRecords |
全量階段已經處理的資料條數 |
條 |
查看全量階段已處理的資料量 |
|
|
numSnapshotRecordsPerTable |
每個表全量階段已經處理的資料條數 |
條 |
查看每個表全量階段已處理的資料量 |