定時任務併發數與髒資料說明

  • 文檔創建者:Roxy
  • 編輯次數:11
  • 最近更新:Jack.Li 于 2025-07-18
  • 1. 併發數

    1.1 問題描述

    由於 FineDataLink 中定時任務需要佔用記憶體和併發資源等,因此使用者可能需要根據實際的使用情況進行任務調整。

    閱讀此部分,你可以解決和理解如下問題:

    • 問題一:如何配置定時任務的併發數?

    • 問題二:為什麼我的定時任務跑的比較慢,實際運作的併發數不夠?

    • 問題三:為什麼我的定時任務併發數配置的很高,但是任務運作速度仍然很慢?

    1.2 解譯說明

    最多能啟動的定時任務數量。

    1.2.1 4.1.4 及之後版本

    併發數詳細說明參見:併發控制

    為了提高定時任務的效率,可以適當調整任務的併發數,以縮短資料搬遷需要的時間。在產品中配置位置如圖所示:

    QQ20250718-100924.png


    1.2.2 4.1.4 之前版本

    FDL 能同時執行的任務數跟 cpu 的執行緒數有關,預設是 cpu 執行緒數的 1/2 。假如 cpu 執行緒數為 8,FDL 則可以同時執行 4 個定時任務,若定時任務數有 5 個,另外一個需要佇列。

    1.3 任務併發數配置最佳實踐

    • 任務併發數越大,任務運作需要搶佔的資源越多,,即前面提交任務先搶佔資源運作,後提交的任務後搶佔資源運作。建議合理配置任務併發數,避免大併發任務長時間運作,進而阻擋後續任務獲得資源得到執行。

    • 小資料量的資料表建議配置小併發,小併發需要的執行資源比較少,有利於任務快速搶佔碎片資源得到運作。由於資料量比較小執行耗時可以控制在合理的範圍內。

    • 同一個資料源上定時任務,建議錯峯運作,可以降低對資料源存取的併發壓力。

    2. 髒資料臨界值

    髒資料容忍功能詳情參見:髒資料容忍

    2.1 問題描述

    閱讀此部分,可以解決和理解如下問題:

    • 問題一:什麼是定時任務的髒資料?

    • 問題二:如何配置定時任務髒資料限制?

    2.2 解譯說明

    髒資料臨界值容忍能力用來控制任務在遇到髒資料時的行為,髒資料是指資料條目在寫入目標資料源程式中發生了異常,則此筆資料被視為髒資料。

    以下為定時任務髒資料出現的情況:

    1)與目標欄位配置不匹配而無法寫入的資料(目標欄位長度/類型不匹配、目標欄位缺失、違反目標欄位非空約束等)。

    2)當寫入方式-主鍵衝突策略為「主鍵相同,記錄為髒資料」時,主鍵衝突的資料將被視為髒資料。

    由於各類異構系統對資料處理的複雜和差異性,目前寫入失敗的資料均被分類於髒資料。

    目前定時任務在進行「任務控制」時,支援髒資料臨界值限制能力,對於支援髒資料臨界值限制的配置:

    QQ20250718-101524.png


    常見配置場景介紹如下:

    • 不配置髒資料容忍:表示不容忍所有出現的髒資料,只要遇到髒資料就會導致任務失敗。

    • 配置髒資料限制為一個正整數N:表示最多容忍N條髒資料,在髒資料超過N條時,任務會失敗跳出;任務執行程式中,髒資料不會寫入到目標表。

    2.3 最佳實踐

    • 關連式資料庫(MySQL、SQL Server、PostgreSQL、Oracle、ClickHouse 等對於資料要求比較敏感的場景,建議不配置髒資料容忍,以即時發現資料品質風險。

    • 對於資料要求不敏感的場景,可以配置髒資料限制,或者配置一個業務上合理的髒資料臨界值上限,以降低日常髒資料處理維運負擔。

    • 關鍵任務配置任務失敗和延遲警報,以即時發現線上問題。

    Snipaste_2025-07-18_10-16-08.png


    3. 髒資料處理

    3.1 查看髒資料條數及原因

    定時任務運作時,若存在髒資料,日誌中將會報錯。如下圖所示:

    QQ20250718-102125.png


    「統計」Tab頁下,可看到髒資料具體條數,點選條數,可看到錯誤類型和錯誤原因。如下圖所示:

    QQ20250718-102601.png

    QQ20250718-102633.png

    3.2 髒資料常見原因及方案

    原因及解決方案
    報錯範例
    表空間不足,可將報錯在百度輸入搜尋解決方案

    1)資料無法正常寫入,請做出檢查並修改 異常情況:ORA-01653: unable to extend table XX by 128 in tablespace SJZT

    2)報錯:ORA-01654:索引ADMIN.ZYH無法透過128 (在表空間YYBI中)擴展

    主鍵有 null資料無法正常寫入,請做出檢查並修改 異常情況:Data loading to remote server failed 

    原因:

    id 設定了主鍵,將 id 為空的資料寫入

    解決方案:

    寫入前可將為空的 id 過濾出去

    id 不能為空
    源資料與目標表欄位長度欄位類型不適配

    1)髒資料報錯欄位too long

    2)髒資料報錯將截斷字串或二進制資料

    2)下圖:

    1704187682459752.png

    目標資料庫建的表的格式不是utf-8編碼格式的,識別不了中文

    注:若寫入中文或生僻字,目標表需要支援這些,排查下目標資料庫的字元集格式、排序規則

    --

    3.3 處理髒資料

    找到造成出現髒資料的原因並解決後,可重試任務。詳情請參見:重試任務

    定時任務運作程式中,若遇到髒資料,髒資料不會寫入到目標表中,但正常的資料會順利寫入到目標表中。

    產生髒資料後,重試的處理場景:

    場景
    增量同步的方式
    重試後是否會存在資料問題
    建議處理措施
    全量同步
    --
    增量同步-使用時間戳


    動態參數:如:配置 now-1 作為資料範圍,每次更新前一天資料


    在重試時,使用者可以指定本次運作的臨時任務參數值

    且使用者的任務設計需要支援冪等,即同一資料範圍的定時任務需要支援多次運作

    獲取目標表的最新資料時間戳

    如:每次任務先從目標表獲取最大的時間戳,作為本次同步的起始時間

    使用者需要手動刪除目標表大於本批次的資料,以進行重試

    且使用者的任務設計需要支援冪等,即同一資料範圍的定時任務需要支援多次運作

    自訂配置表儲存斷點

    如:每次任務最後一步儲存本次同步的最大時間至一張表儲存

    使用者需要手工修改斷點值,以進行重試

    且使用者的任務設計需要支援冪等、即同一資料範圍的定時任務需要支援多次運作

    全表比對--

    附件列表


    主題: 維運中心
    已經是第一篇
    已經是最後一篇
    • 有幫助
    • 沒幫助
    • 只是瀏覽
    • 评价文档,奖励 1 ~ 100 随机 F 豆!