本文為您介紹Flink全託管支援的監控指標詳情。
注意事項
Source端的指標表現並不是判斷問題根源的充分條件,只反映了Source當前的工作狀況,您仍然需要其他輔助指標或工具來判斷問題的根源。常見問題的指標表現如下。
情境
詳情
作業中某些運算元存在反壓
判斷反壓最直接的方式是使用Flink UI提供的反壓檢查功能,而不是通過指標判斷。反壓的存在會導致Source端資料發送至下遊運算元的速率下降,您可能會觀察到sourceIdleTime周期性上升,currentFetchEventTimeLag和currentEmitEventTimeLag不斷增長。極限情況下(某些運算元卡死)sourceIdleTime會持續上升。
Source是效能瓶頸點
如果僅是Source的輸送量不足,那麼您的作業中不應該檢測到反壓,sourceIdleTime會維持在較低的值(Source一直在工作),currentFetchEventTimeLag和currentEmitEventTimeLag接近,但是兩個指標均較高。
上遊資料扭曲或某個分區為空白
資料扭曲或空分區會導致某一個或者幾個Source並行度處於閑置狀態,您會觀察到這些Source的sourceIdleTime指標較大。
如果您發現作業的延遲較高,則可以使用以下指標幫您分析Flink當前的處理能力,以及資料在外部系統中的滯留情況。
指標
詳情
sourceIdleTime
該指標反映Source是否有閑置,如果該指標較大,說明您的資料在外部系統中的產生速率較低。
currentFetchEventTimeLag和currentEmitEventTimeLag
均反映了Flink當前處理的延遲,您可以通過兩個指標的差值(即資料在 Source中停留的時間)分析Source當前的處理能力。
如果兩個延遲非常接近,說明Source從外部系統中拉取資料的能力(網路 I/O、並發數)不足。
如果兩個延遲差值較大,說明Source的資料處理能力(資料解析、並發、反壓)不足。
pendingRecords
如果您使用的連接器彙報了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) |
|
系統檢查點
指標 | 含義 | 詳情 | 單位 |
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 | 每個表全量階段已經處理的資料條數 | 條 | 查看每個表全量階段已處理的資料量 |