本文介紹資料攝入作業中的常見問題與解決方案。
快照階段執行Checkpoint時報錯,JobMananger記憶體不足
影響面
此問題影響使用MySQL Source的Flink CDC資料攝入作業。
此問題可能在使用任意Realtime ComputeVVR引擎版本的作業中出現。
異常表現
任務在全量快照階段頻繁異常重啟,查看JobManager日誌可見包含OutOfMemory記憶體不足錯誤棧。
在監控警示介面的資料攝入相關指標中,可以看到“Num of remaining SnapshotSplits”和“Num of processed SnapshotSplits”的總數非常多。

異常根因
在MySQL Source執行全量階段快照時,需要將全部分區的中繼資料資訊持久化儲存到狀態中。在作業資料量較大、或是分區大小較小時,JM會切分出產生大量需要讀取的分區,導致出現OutOfMemory的報錯。
解決方案
增大JobManager分配的記憶體資源數量。
調整運行參數
jobmanager.memory.heap.size和jobmanager.memory.off-heap.size,增大JobManager可使用的堆內及堆外記憶體。
作業增量階段從狀態恢複時失敗,JobMananger記憶體不足
影響面
此問題影響使用MySQL Source的Flink CDC資料攝入作業。
此問題影響使用Realtime ComputeVVR 11.1及更低版本的作業。
異常表現
任務已經進入增量階段,但在從狀態中恢複時JobManager報錯,日誌提示記憶體不足。
異常根因
Realtime ComputeVVR 11.1及更低版本引擎在全量切換到增量階段之後,有可能無法正確清理狀態中持久化儲存的表結構資訊,導致從Checkpoint恢複時記憶體不足。
解決方案
升級Realtime ComputeFlink引擎到VVR 11.2或更高版本。
快照即將結束時作業失敗,TaskManager記憶體不足
影響面
此問題影響使用MySQL Source的Flink CDC資料攝入作業。
此問題可能在使用任意Realtime ComputeVVR引擎版本的作業中出現。
異常表現
MySQL全量階段即將結束,只剩下少數幾個分區未處理時作業 OOM。
在TaskManager 的日誌中搜尋
using select statement關鍵字,發現最後一個無界查詢中包含大量資料。
異常根因
全量階段讀取的時間過長,因此最後一個分區積累了大量需要讀取的增量資料,導致消費該分區資料時記憶體不足。
解決方案
設定MySQL Source的
scan.incremental.snapshot.unbounded-chunk-first.enabled: true參數,並重新進行快照。
使用 pt-osc 等無鎖變更工具變更表結構後,無資料輸出
影響面
此問題影響使用MySQL Source的Flink CDC資料攝入作業。
此問題影響使用Realtime ComputeVVR 11.1及更低版本的作業。
異常表現
作業在執行無所表結構變更後持續運行,無異常重啟;
監控警示中的CurrentFetchTimeLag正常推進;
MySQL Source無資料輸出,CurrentEmitTimeLag也不再更新。
異常根因
早期版本不支援無鎖表結構變更工具產生的DDL變更事件。
解決方案
升級Realtime ComputeFlink引擎到11.2或更高版本;
設定MySQL Source的
scan.parse.online.schema.changes.enabled: true參數。
使用 pt-osc 等無鎖變更工具變更表結構後,作業Failover
影響面
此問題影響使用MySQL Source的Flink CDC資料攝入作業。
此問題影響使用Realtime ComputeVVR 11.1及更低版本的作業。
異常表現
作業在執行無所表結構變更後異常重啟,Transform運算元報錯列類型不符。
異常根因
Realtime ComputeFlink引擎VVR 11.1版本存在已知問題,在無鎖表結構變更的同時插入大量資料,有機率導致下發無法解析的事件。
解決方案
升級Realtime ComputeFlink引擎到11.2或更高版本,並從無鎖表結構變更前的快照重啟。
從表結構變更前的快照恢複作業報錯
影響面
此問題影響使用MySQL Source的Flink CDC資料攝入作業。
此問題影響使用Realtime ComputeVVR 11.1及更低版本的作業。
異常表現
從歷史快照有狀態重啟,且執行快照後又發生了表結構變更。
作業消費Binlog時拋出異常,提示表結構不匹配。
異常根因
Realtime ComputeFlink引擎VVR 11.1及更早版本不支援從表結構不相容的位點做有狀態啟動。
解決方案
升級Realtime ComputeFlink引擎到11.2或更高版本,即可從表結構變更前的快照重啟。
Flink CDC 作業全量階段與增量階段對 Binlog 保留時間有什麼要求?
影響面
此問題影響使用 MySQL Source 的 Flink CDC 資料攝入作業。
此問題可能在使用任意Realtime Compute VVR 引擎版本的作業中出現。
異常表現
作業在全量階段異常失敗,日誌提示 Binlog 檔案不存在或已到期。
全量階段資料同步出現漏同步或資料不一致。
異常根因
Flink CDC 作業在全量階段和增量階段對 Binlog 的消費位點要求不同:
全量階段:Flink CDC 在讀取全量歷史快照資料的同時,記錄快照開始時的 Binlog 位點。全量階段完成後,需從該位點消費 Binlog 以補齊快照期間的增量資料。由於全量階段耗時較長,快照開始時的 Binlog 可能已被資料庫的 Binlog 保留原則清理,導致同步失敗。
增量階段:作業消費較新的 Binlog,通常不受 Binlog 到期清理策略的影響。
解決方案
確認作業當前所處的消費階段。在監控警示頁面查看資料攝入相關指標,若"Num of remaining SnapshotSplits"大於 0,則說明作業仍處於全量階段。
對於因 Binlog 被清理導致的全量階段失敗,建議執行以下操作:
無狀態重啟作業,並適當增加作業並發數以提升全量階段的處理速度,縮短全量階段耗時。
延長資料庫的 Binlog 保留時間,確保全量階段完成前 Binlog 不被清理。
檢查並調整啟動位點配置,合理設定 Binlog 啟動位點。