當您在DataStudio中完成任務開發,並發布至生產環境後,您可以進入營運中心運行即時同步任務,同時,您還可以在營運中心監控任務運行狀態、查看任務運行指標等。本文列舉即時同步任務的常見營運操作。
前提條件
已完成即時同步任務的建立、發布。詳情請參見:單表即時同步任務配置。
單表即時同步是 DataWorks Data Integration中針對單張源表、一個 Topic、一個 Logstore 或同等粒度資料對象到目標端的即時同步鏈路。在日常營運中,營運人員需要快速定位任務異常、調整績效參數並保障資料一致性。本文介紹單表即時同步任務的前置條件、各階段營運重點、效能調優方法和典型排查情境,協助建立完整的營運和調優體系。
前提條件
在使用單表即時同步任務前,需要確保滿足以下前置條件。
條件類別 | 要求說明 | 驗證方法 |
源端許可權 | 確認已具備源端中繼資料讀取許可權,能夠擷取源表的完整欄位資訊 | 使用對應帳號訪問源端,確認可讀取表結構和欄位資訊 |
目標端許可權 | 確認已具備目標端建表或寫入許可權 | 使用對應帳號在目標端執行建表或寫入測試 |
資源群組 | 資源群組規格滿足全量階段的計算和網路需求 | 確認資源群組處於可用狀態,規格滿足同步任務需求 |
網路連通性 | 確認源端到通道到目標端的網路連通 | 通過網路測試載入器確認各節點之間網路可達 |
單表即時同步營運和調優
本文用於單表範圍即時同步任務的日常營運、問題排查和效能調優。這裡的單表即時指一個任務主要同步一張源表、一個 Topic、一個 Logstore 或一個同等粒度的資料對象到目標端的即時鏈路。
單表即時獨立成章,主要是因為部分源端、目標端或通道能力暫不適合按整庫即時方式承載,或使用者只需要同步一個明確的資料對象。源端和通道能力允許時,推薦優先使用整庫即時任務並只選擇一張表來承載單表範圍的即時同步;這樣可以複用整庫即時在結構遷移、全量初始化、增量接入和後續擴表上的能力。無論入口如何,本頁只討論單表範圍內的即時鏈路營運,不覆蓋整庫多表批量管理、整庫離線和整庫全增量即時同步。
適用通道和邊界
先按任務形態、通道能力和排查重點三項判斷。
判斷項 | 適用口徑 | 不適用 / 重點看 |
任務形態 | 一張表、一個 Topic、一個 Logstore 或同等粒度資料流 | 不承擔整庫表發現、批量加表、減表下線 |
典型通道 | Kafka / DataHub / SLS / LogHub → Hologres / MaxCompute / Kafka / Doris / StarRocks / Lindorm / DLF / OSS | 資料庫源可用整庫即時選單表時,優先用整庫即時 |
排查重點 | 位點、日誌保留、主鍵、DDL、消費堆積、訊息格式、欄位解析、髒資料、目標端限流 | 不套整庫加減表經驗 |
Hologres 也可以作為單表即時的源端。遇到 Hologres → Hologres、Hologres → MaxCompute、Hologres → Doris 等表級即時鏈路時,按單表即時排查,重點看源表許可權、Binlog/變更捕獲、主鍵、欄位對應和目標端寫入語義。
核心邊界:單表即時不是整庫即時的簡化版;它更適合源端許可權、訊息模型、資料格式或目標端寫入語義不適合整庫即時的情境,Hologres 作為源端時也按表級即時鏈路排查。
任務階段
階段 | 說明 | 營運重點 |
結構準備 | 讀取源端欄位、主鍵、分區或訊息格式,並在目標端建立或確認目標結構 | 源端中繼資料許可權、目標端建表或寫入許可權、欄位類型、主鍵、分區和映射規則 |
全量初始化 | 將任務啟動前已有的歷史資料寫入目標端。是否包含該階段取決於任務配置和通道能力 | 切分鍵、全量並發、源端串連數、資源規格、目標端寫入能力 |
即時增量 | 持續消費 Binlog、WAL、日誌、訊息或變更事件並寫入目標端 | 位點、業務延遲、吞吐、Checkpoint、Failover、DDL、髒資料、目標端寫入能力 |
單表即時任務的風險通常集中在兩類:一類是位點和日誌保留,停止時間過長後可能無法從原位點恢複;另一類是目標端寫入語義,主鍵、寫入模式、分區和欄位對應不一致時,Update、Delete 或等冪寫入可能不符合預期。
常見營運操作
啟動和停止
啟動任務後,先確認結構準備是否完成,再觀察全量初始化是否啟動和推進,最後確認即時增量是否持續有讀取和寫入。訊息源任務需要同時觀察消費位點和訊息堆積;資料庫日誌型任務需要關注 Binlog、WAL 或日誌保留時間。
停止任務前,確認源端日誌或訊息保留時間是否能覆蓋停機視窗。停機時間超過保留期後,任務可能無法從原位點恢複,通常需要重設位點、跳過歷史積壓或重新初始化,執行前需要評估重複寫入和資料丟失風險。
修改配置
單表即時任務常見修改包括調整欄位對應、主鍵、寫入模式、分區規則、並發、資源、位點和髒資料策略。
變更類型 | 風險點 | 建議 |
修改欄位對應 | 可能導致欄位缺失、類型轉換失敗或目標端寫入異常 | 提交前確認源端欄位、目標端欄位、欄位類型和預設值 |
修改主鍵或寫入模式 | 可能影響 Update、Delete、等冪寫入和去重結果 | 先確認目標端是否支援對應寫入語義,再評估歷史資料是否需要重刷 |
修改分區規則 | 可能導致資料寫入新分區、錯誤分區或產生大量小分區 | 提交前確認分區欄位粒度、分區運算式和目標端分區限制 |
調整並發和資源 | 可能增加源端、目標端或資源群組壓力 | 逐步調整,每次調整後觀察延遲、吞吐、Checkpoint 和 Failover |
重設位點 | 可能造成重複消費或跳過資料 | 先確認業務可接受的復原點,再記錄重設前後的時間和位點 |
調整髒資料策略 | 可能讓任務繼續運行但丟棄異常記錄 | 不建議只通過放大閾值繞過問題;先判斷髒資料是否影響業務結果 |
警示配置
單表即時任務建議至少關注任務狀態、業務延遲和 Failover。根據通道能力和任務配置,再補充資源使用率、寫入異常、DDL 通知、訊息堆積量。
訊息源任務還需要關注源端 Topic、Shard、Logstore 或消費組的積壓;資料庫日誌型任務需要關注 Binlog、WAL、歸檔日誌或複製槽保留情況。只配置任務失敗警示,無法發現任務仍在運行但延遲持續升高、寫入變慢或位點長期不推進的問題。
排查方法
任務無資料輸出
任務顯示運行中但目標端沒有新資料時,先確認源端是否真的有新增資料,再區分是讀端沒有消費、鏈路處理異常,還是寫端沒有提交。
排查順序:
檢查源端表、Topic、Logstore 或日誌位點是否有新增資料。
檢查任務是否處於全量初始化、即時增量或 Failover 狀態。
檢查讀取指標、寫入指標、業務延遲和 Checkpoint 是否正常推進。
檢查目標表、目標資料分割、主鍵和寫入模式是否符合配置。
檢查是否存在髒資料、欄位對應失敗或目標端許可權問題。
如果運行詳情中的 DML/DDL 統計短時間沒有資料,但日誌和目標端寫入正常,應同時排查指標採集延遲或採集異常,避免把監控展示問題誤判為同步中斷。
全量初始化慢或失敗
全量初始化慢時,先確認瓶頸在源端讀取、網路、資源群組、目標端寫入,還是切分不均。
現象 | 可能原因 | 處理建議 |
全量任務長時間未開始 | 資源排隊、源端或目標端連通性異常、目標端建表失敗 | 檢查資源群組狀態、資料來源連通性和目標端許可權 |
全量讀取慢 | 切分鍵不合理、源端 SQL 未走索引、源端負載高、串連數不足 | 選擇分布更均勻且有索引的切分鍵,適度調整並發,源端壓力高時限速或錯峰 |
全量寫入慢 | 目標端限流、分區過多、批量提交耗時高 | 檢查目標端寫入能力、分區數量、批量寫入參數和資源規格 |
全量階段失敗 | 欄位類型不相容、主鍵衝突、目標端約束、髒資料超限 | 先定位失敗欄位和目標端錯誤,再調整映射、清洗資料或修改目標結構 |
全量階段不要只看平均吞吐。少數大分區、寬表、大欄位或熱點分區可能決定整體完成時間。
即時延遲升高
即時延遲升高時,先看延遲是否持續下降。如果任務剛完成全量初始化,即時鏈路可能正在回放全量期間積累的增量資料;如果延遲持續增長,再定位瓶頸在讀端、寫端、資源、網路還是外部系統。
建議按以下順序排查:
在任務運行詳情中查看視窗等待時間,判斷瓶頸主要在讀端還是寫端。
查看延遲時間段的任務日誌,搜尋
Error、Exception、OutOfMemory等關鍵字。查看 Failover 記錄,確認是否存在頻繁 Failover、OOM 或外部服務異常。
查看運行指標和事件,重點關注吞吐、反壓、Checkpoint、JVM 記憶體、GC、DDL 事件和髒資料。
再按源端、目標端、資源、並發和網路繼續定位原因,不建議在未定位瓶頸前直接加並發或資源。
視窗等待時間可以作為第一層判斷:
判斷結果 | 可能原因 | 下一步 |
讀端等待時間高 | 源端讀取慢、分區或 Shard 傾斜、源端限流、變更量突增、日誌積壓 | 優先排查源端監控、分區或 Shard 分布、Binlog/WAL/訊息堆積和 Reader 資料量 |
寫端等待時間高 | 目標端寫入慢、目標端限流、動態分區過多、批量提交慢、網路頻寬不足 | 優先排查目標端資源、寫入 QPS、Sink 日誌、批量提交耗時和動態分區 |
讀寫端等待都高 | 任務資源不足、反壓、Checkpoint 慢、頻繁 Failover、外部系統抖動 | 優先查看 Failover、JVM/GC、Checkpoint、資源群組規格和任務並發 |
明確瓶頸所在的位置後,可針對不同的現象進一步排查:
現象 | 可能原因 | 處理建議 |
延遲持續增長 | 源端寫入速度高於消費速度、網路頻寬不足、目標端寫入慢 | 分別檢查源端產生速率、讀取速率、寫入速率和目標端限流 |
讀端等待或反壓明顯 | 大事務、日誌積壓、訊息分區熱點、源端限流 | 檢查源端寫入峰值、日誌增長、分區或 Shard 分布 |
寫端等待時間高 | 目標端寫入慢、批量提交過小、串連數不足、分區過多 | 優先檢查目標端資源和寫入限制,再調整 batch、flush、commit 或串連池參數 |
Checkpoint 變慢或失敗 | 寫端提交慢、狀態過大、外部服務抖動、資源不足 | 結合 Checkpoint duration、failedCount、State size 和日誌定位 |
頻繁 Failover | 記憶體不足、外部服務異常、欄位對應失敗、DDL 處理異常 | 查看 Failover 前後的異常棧、髒資料和 DDL 事件 |
日誌出現 | 任務記憶體不足或單並發處理壓力過高 | 適當增加 CU 或記憶體,並觀察 JVM、GC、Checkpoint 和 Failover 是否改善 |
Kafka、DataHub、LogHub 等訊息源要重點看分區或 Shard 數量。單個分區或 Shard 通常只能被一個並發消費,資料集中在少數分區時,單純增加總並發不一定有效。可以結合不同 Reader 線程的累計位元組數和源端監控,判斷是否存在熱點分區或熱點 Shard。
MySQL 等資料庫日誌型源端要重點看大事務、大量 DML、頻繁 DDL 和 Binlog 增長速率。如果同步速度不高但延遲持續增加,建議結合源庫審計日誌、CPU、IO、串連數和 Binlog 增長情況判斷是否存在源端壓力或未同步庫表產生大量 Binlog。
寫入 MaxCompute 時,如果日誌出現
uploader map size has reached uploaderMapMaximumSize,通常說明單個 Flush 間隔內動態分區值過多。優先調整分區粒度或動態分區欄位,避免使用秒級時間、訂單號、使用者識別碼 等高基數欄位作為分區值,再評估是否需要增加並發或資源。
DDL 事件處理異常
DDL 後任務失敗、延遲升高或目標端結構不一致時,先確認當前通道是否支援該 DDL 類型,以及任務中對該 DDL 的處理策略。
排查重點:
源端發生了哪些 DDL,例如加列、刪列、改類型、重新命名、建表、刪表、索引變更。
目標端是否支援相同 DDL 或等價結構變更。
任務策略是正常處理、忽略、警示還是停止。
目標端帳號是否具備改表許可權。
DDL 前後欄位對應、主鍵和分區是否仍一致。
不支援的 DDL 不建議直接忽略。忽略 DDL 可能讓任務繼續運行,但後續 DML 寫入可能因為欄位不匹配、主鍵變化或目標端結構不一致繼續失敗。
Update 或 Delete 不符合預期
Update、Delete 後目標端資料不符合預期時,優先檢查目標端是否具備可定位記錄的主鍵或唯一鍵,以及源端和目標端主鍵映射是否一致。
常見原因包括:
目標端沒有主鍵或唯一鍵,無法按記錄更新或刪除。
源端主鍵和目標端主鍵不一致。
主鍵欄位被轉換、重新命名或寫入為空白。
目標端寫入模式不支援更新或刪除。
任務配置了忽略 Delete 或特殊寫入策略。
寫入失敗被記錄為髒資料,但任務仍繼續運行。
處理時先用少量範例記錄核對源端事件、任務映射和目標端結果,再決定是否調整主鍵、寫入模式或重新初始化目標表。
髒資料增多
髒資料增多時,不建議直接放大髒資料閾值。先確認髒資料是否會導致目標端缺數、欄位為空白、欄位截斷、主鍵衝突或分區異常。
排查重點:
欄位類型、長度、精度和非空約束是否匹配。
目標端主鍵、唯一鍵或分區欄位是否滿足要求。
源端是否新增了超長字串、非法編碼、特殊 JSON、不可解析時間或不支援的資料類型。
目標端是否有限流、寫入失敗或服務端過濾。
只有確認業務可以接受丟棄這些異常記錄時,才考慮臨時提高髒資料閾值,並在後續修複源端資料或目標端結構。
調優建議
調優項 | 適用情境 | 建議 |
資源規格 / CU | CPU、記憶體、網路或資源群組利用率較高 | 逐步增加資源,觀察延遲、Failover 和 Checkpoint 是否改善 |
即時並發 | 源端和目標端都有足夠並行度 | 先確認不存在單分區、單 Shard 或單表熱點,再增加並發 |
全量並發和切分鍵 | 全量初始化慢 | 選擇分布均勻、有索引且類型受支援的切分欄位 |
Checkpoint / Flush 間隔 | 寫端頻繁提交或提交開銷高 | 小幅調整後觀察吞吐、資料可見延遲和失敗率,不建議一次調大過多 |
批量寫入參數 | 寫端等待時間高 | 結合目標端限制調整 batch、flush、commit 和串連池參數 |
分區粒度 | 目標端分區過多或提交耗時高 | 避免使用秒級時間、訂單號、使用者識別碼 等高基數欄位做動態分區 |
訊息來源資料分割 | Kafka、DataHub、LogHub 等源端延遲高 | 關注熱點分區和消費並發上限,必要時調整源端分區設計 |
Transformer 邏輯 | 複雜 JSON 解析、欄位加工、過濾規則較多 | 減少不必要的複雜轉換,或增加資源後觀察 CPU 和延遲變化 |
調整 Checkpoint 或 Flush 間隔時,建議先小幅增加,例如從 5 秒調整到 10 秒或 30 秒,觀察 10 到 30 分鐘內的寫入吞吐、Checkpoint 耗時、端到端延遲和目標端負載。如果延遲下降但資料可見度不滿足業務要求,需要回調到更小的間隔。
調優後至少觀察一個穩定視窗。任務重啟後的短時間吞吐可能不能代表長期效果,尤其是有積壓資料、目標端限流或 Checkpoint 抖動時。
常見問題
問題 | 排查重點 | 處理建議 |
任務運行中但目標端沒有資料 | 源端是否有新資料、位點是否推進、目標端是否寫入、指標採集是否正常 | 同時查看源端資料、任務日誌、DML 指標和目標端結果,避免只依賴單個頁面判斷 |
停止後無法從原位點恢複 | Binlog、WAL、日誌或訊息是否超過保留時間 | 重設位點或重新初始化前,先評估重複消費、跳過資料和下遊影響 |
Kafka 等訊息源延遲顯示很高 | 訊息時間是否是歷史時間、消費位點是否落後、分區是否熱點 | 區分“歷史訊息時間導致的延遲顯示”和真實消費能力不足 |
DataHub 寫入或消費延遲高 | 是否觸發流量限制、batchSize 是否過小、是否有反壓 | 結合源端限流、任務反壓和寫端吞吐調整參數或配額 |
寫入 MaxCompute 等目標端變慢 | 分區數量、Tunnel Session、Checkpoint 提交耗時 | 優先減少單個 Checkpoint 內涉及的分區數量,再調批量提交和資源 |
Hologres 寫入延遲高 | 目標表主鍵、Segment Key、表類型、寫入模式和 Holo 負載 | 先確認目標表設計是否適合即時寫入,再調整任務資源和批量寫入參數 |
目標端 Update 或 Delete 不生效 | 目標端主鍵、寫入模式、欄位對應、髒資料日誌 | 優先用範例記錄核對源端事件、目標端主鍵和實際寫入結果 |
DDL 後任務失敗 | DDL 類型、目標端支援情況、DDL 策略、目標端許可權 | 查看 DDL 事件和失敗日誌,確認是否需要手動調整目標表結構後恢複 |
高風險操作檢查
執行重設位點、重啟任務、修改主鍵、修改寫入模式、大幅調參、重跑全量初始化或清理目標表前,確認:
源端日誌或訊息保留時間是否足夠。
當前位點、業務時間和目標端最新資料是否已記錄。
操作是否會造成重複寫入、跳過資料或目標端覆蓋。
下遊是否已經消費目標端資料。
是否存在未處理 DDL、髒資料或頻繁 Failover。
警示是否覆蓋任務狀態、業務延遲、Failover、寫入異常和髒資料。