1. 併發數
1.1 問題描述
由於 FineDataLink 中定時任務需要佔用記憶體和併發資源等,因此使用者可能需要根據實際的使用情況進行任務調整。
閱讀此部分,你可以解決和理解如下問題:
問題一:如何配置定時任務的併發數?
問題二:為什麼我的定時任務跑的比較慢,實際運作的併發數不夠?
問題三:為什麼我的定時任務併發數配置的很高,但是任務運作速度仍然很慢?
1.2 解譯說明
最多能啟動的定時任務數量。
1.2.1 4.1.4 及之後版本
併發數詳細說明參見:併發控制
為了提高定時任務的效率,可以適當調整任務的併發數,以縮短資料搬遷需要的時間。在產品中配置位置如圖所示:
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)當寫入方式-主鍵衝突策略為「主鍵相同,記錄為髒資料」時,主鍵衝突的資料將被視為髒資料。
由於各類異構系統對資料處理的複雜和差異性,目前寫入失敗的資料均被分類於髒資料。
目前定時任務在進行「任務控制」時,支援髒資料臨界值限制能力,對於支援髒資料臨界值限制的配置:
常見配置場景介紹如下:
不配置髒資料容忍:表示不容忍所有出現的髒資料,只要遇到髒資料就會導致任務失敗。
配置髒資料限制為一個正整數N:表示最多容忍N條髒資料,在髒資料超過N條時,任務會失敗跳出;任務執行程式中,髒資料不會寫入到目標表。
2.3 最佳實踐
關連式資料庫(MySQL、SQL Server、PostgreSQL、Oracle、ClickHouse 等對於資料要求比較敏感的場景,建議不配置髒資料容忍,以即時發現資料品質風險。
對於資料要求不敏感的場景,可以配置髒資料限制,或者配置一個業務上合理的髒資料臨界值上限,以降低日常髒資料處理維運負擔。
關鍵任務配置任務失敗和延遲警報,以即時發現線上問題。
3. 髒資料處理
3.1 查看髒資料條數及原因
定時任務運作時,若存在髒資料,日誌中將會報錯。如下圖所示:
「統計」Tab頁下,可看到髒資料具體條數,點選條數,可看到錯誤類型和錯誤原因。如下圖所示:
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)下圖: |
目標資料庫建的表的格式不是utf-8編碼格式的,識別不了中文 注:若寫入中文或生僻字,目標表需要支援這些,排查下目標資料庫的字元集格式、排序規則 | -- |
3.3 處理髒資料
找到造成出現髒資料的原因並解決後,可重試任務。詳情請參見:重試任務
定時任務運作程式中,若遇到髒資料,髒資料不會寫入到目標表中,但正常的資料會順利寫入到目標表中。
產生髒資料後,重試的處理場景:
場景 | 增量同步的方式 | 重試後是否會存在資料問題 | 建議處理措施 |
---|---|---|---|
全量同步 | - | 否 | - |
增量同步-使用時間戳 | 動態參數:如:配置 now-1 作為資料範圍,每次更新前一天資料 | 是 | 在重試時,使用者可以指定本次運作的臨時任務參數值 且使用者的任務設計需要支援冪等,即同一資料範圍的定時任務需要支援多次運作 |
獲取目標表的最新資料時間戳 如:每次任務先從目標表獲取最大的時間戳,作為本次同步的起始時間 | 是 | 使用者需要手動刪除目標表大於本批次的資料,以進行重試 且使用者的任務設計需要支援冪等,即同一資料範圍的定時任務需要支援多次運作 | |
自訂配置表儲存斷點 如:每次任務最後一步儲存本次同步的最大時間至一張表儲存 | 是 | 使用者需要手工修改斷點值,以進行重試 且使用者的任務設計需要支援冪等、即同一資料範圍的定時任務需要支援多次運作 | |
全表比對 | - | 否 | - |