全部產品
Search
文件中心

DataWorks:即時同步常見問題

更新時間:Jun 19, 2024

本文為您介紹即時同步的相關問題。

文檔概述

問題分類

相關文檔

即時同步任務配置須知

即時同步MySQL資料常見問題

即時同步MySQL資料來源的資料時,一開始讀到資料,一段時間後無法讀到資料,怎麼處理?

即時同步Oracle、PolarDB、MySQL常見問題

即時同步Oracle、PolarDB、MySQL任務重複報錯

報錯資訊與解決方案

報錯資訊與解決方案

  • 即時同步Kafka資料報錯: Startup mode for the consumer set to timestampOffset, but no begin timestamp was specified.

  • 即時同步MySQL資料報錯:

    • Cannot replicate because the master purged required binary logs.

    • MySQLBinlogReaderException

    • show master status' has an error!

    • parse.exception.PositionNotFoundException: can't find start position forxxx

  • 即時同步Hologres資料報錯:permission denied for database xxx

  • 即時同步至MaxCompute資料報錯:ODPS-0410051:invalid credentials-accessKeyid not found

  • 即時同步至Oracle報錯:logminer doesn't init, send HeartbeatRecord

即時同步任務支援哪些資料來源?

即時同步支援的資料來源請參考文檔:即時同步支援的資料來源

即時同步任務為什麼不建議使用公網?

即時同步任務使用公網時,會存在以下風險:

  • 網路可能不穩定,丟包等時常發生,影響同步效能。

  • 安全性不高。

即時同步欄位格式問題

Data Integration即時同步在同步MySQL、Oracle、Loghub和PolarDB類型的資料至DataHub或Kafka時,會在同步的目標端添加5個附加列,以進行中繼資料管理、排序去重等操作。詳情請參見即時同步欄位格式

為什麼即時同步任務延遲較大?

當您在查詢即時同步任務產出的表資料,探索資料未同步時,原因可能是即時同步任務出現延遲,您可以進入營運中心的即時同步任務介面,查看任務的業務延遲數值是否過大。詳情請參見即時同步任務延遲解決方案

若業務延遲較大,其可能原因如下:

報錯現象

直接原因

解決方案

讀端延遲大

源端資料量變更過多。

延遲突然增大,說明某一時間點源端資料量增加。

若源端資料更新快,資料量多,但同步延遲大,您可以:

  • 修改任務配置:您可以在源端資料庫最大串連數功能內,基於同步庫或表個數綜合評估調整即時同步並發數。

    說明

    並發設定上限為當前資源群組支援的最大並發數。不同規格資源群組支援的最大並發數或任務數不同,詳情請參見:DataWorks資源群組概述。設定並發時,源端若為RDS可結合資料庫允許的最大串連數進行評估,LogHub可根據shard數來設定。

  • 升級資源群組規格:當源端資料量增大,或者同步解決方案任務重新編輯過同步任務(將任務由讀取單庫單表變更為讀取多庫多表),導致當前資源群組消耗不了當前同步資料量級,此時您可選擇擴大資源群組規格,資源群組規格調整詳情請參考:變更規格操作

同步起始位點設定較早。

若起始位點比較早,即時同步任務追平資料需要一定時間。

寫端延遲大

目標資料庫效能、負載等問題

當資料庫負載較高時,單一的調整同步任務並發並不能解決問題,您需要聯絡資料庫管理員尋求相關協助。

讀寫端延遲大

使用公網同步,網路問題導致同步任務延遲。

公網同步無法保障即時同步時效性,建議您打通網路後通過內網同步資料。

說明

公網同步存在以下風險:網路可能不穩定,丟包等時常發生,影響同步效能,安全性不高。

若源端和目標端資料庫效能差異較大或資料庫負載較高,同樣會導致延遲較大。

當資料庫負載較高時,單一的調整同步任務並發並不能解決問題,您需要聯絡資料庫管理員尋求相關協助。

即時同步MySQL資料來源的資料時,一開始讀到資料,一段時間後無法讀到資料,怎麼處理?

  1. 可在資料庫執行以下命令,查看當前這個資料庫執行個體正在寫入的binlog檔案。

    show master status 
  2. 對比日誌中讀到的binlog檔案,在日誌中搜journalName=MySQL-bin.000001,position=50,確認是否有資料寫入資料庫。

  3. 如果有資料在寫入,但是binlog卻沒有往前推進,請聯絡DBA處理。

即時同步資料時,如何處理TRUNCATE?

即時同步支援TRUNCATE的,在增全量合并的時候會生效。如果選擇忽略TRUNCATE,可能會導致進行即時資料同步時出現多的資料。

如何提高即時同步的速度和效能?

如果同步寫入速度較慢,可以適當增加寫入端並發數,調整JVM參數,JVM參數與同步庫數量無關,和變更頻率有關。在當前資源群組機器允許情況下,記憶體給的越大,Full GC頻率會越小,即時同步效能相應也會越高。即時同步01即時同步2

即時同步是否支援在介面運行?

即時同步不支援在DataWorks的介面上直接運行,您需要在配置好即時同步任務後,提交並發布即時同步節點後,進入生產環境運行該節點。詳情請參見即時同步任務營運

即時同步任務DDL策略都有哪些?

處理方式如下:

正常處理

忽略

警示

出錯

此DDL訊息將會繼續下發給目標資料來源,由目標端資料來源來處理,不同目標端資料來源處理策略可能會不同。

丟棄掉此DDL訊息,目標端資料來源不會做任何處理。

丟棄掉此DDL訊息,同時發送警示資訊。

說明

如果即時任務未配置對應警示規則,則無法收到對應的警示資訊。

直接讓即時同步任務以出錯狀態終止運行。

說明

如果即時任務配置了任務狀態對應的警示規則,則可以收到對應的警示資訊。

DDL類型劃分:

建立表

  • 寫入Hudi的即時任務,支援正常處理。

    說明

    當新建立的表名滿足即時任務配置的篩選規則時,則會在目標端建立對應的表。

  • 分庫分表類即時任務,建立符合規則的子表時,會把子表的資料同步到目標表中。並不會建立目標表。

  • 其他類型暫不支援正常處理,只能選擇忽略、警示、出錯。

刪除表

  • 分庫分表類即時任務,支援正常處理。當刪除符合規則的子表時,被刪除子表的資料不再同步,但不會刪除目標表。

  • 其他類型暫不支援正常處理,只能選擇忽略、警示、出錯。

新增列

  • 寫入Odps(MaxCompute)、Hologres、MySQL、Oracle、ADB for MySQL的即時任務,支援正常處理。

    說明

    在源端執行加列時,建議在欄位列表尾部追加新欄位,不推薦在欄位中間插入新的欄位,否則可能會導致資料同步異常。

  • 其他類型暫不支援正常處理,只能選擇忽略、警示、出錯。

刪除列

暫不支援正常處理,只能選擇忽略、警示、出錯。

重新命名表

暫不支援正常處理,只能選擇忽略、警示、出錯。

重新命名列

暫不支援正常處理,只能選擇忽略、警示、出錯。

修改列類型

  • 寫入Hudi的即時任務,支援正常處理,詳情請參考Schema Evolution

  • 其他類型暫不支援正常處理,只能選擇忽略、警示、出錯。

清空表

  • 寫入Odps(MaxCompute)、Hologres、MySQL、Oracle、ADB for MySQL的即時任務,支援正常處理,清空目標表資料。

  • 分庫分表類即時任務,某一子表發生truncate時,刪除目標表中該子表的資料。

  • 其他類型暫不支援正常處理,只能選擇忽略、警示、出錯。

即時同步MySQL資料來源時速度為什麼會變慢?

原因之一就是同步的binlog變多,因為binlog是執行個體層級,即便配置的同步任務只同步了表A,那麼沒有在任務中的表B、表C等如果發生變更,也會產生binlog,這些額外增加的binlog就會使同步處理的速度變慢。

即時同步中選擇單庫與選擇多庫的記憶體佔用模式為什麼會有差異?

選擇大於等於2個庫時就進入了“整執行個體”即時同步的模式,此時資源的佔用要高於2個單獨只有一個庫的即時任務。

即時同步Oracle、PolarDB、MySQL任務重複報錯

  • 現象:即時同步任務重複報錯。

    即時同步來源為Oracle、PolarDB、MySQL資料來源時,預設不支援處理源端DDL訊息,當進行除建立表以外的DDL變更時,即時任務將報錯退出。斷點續傳情況下,可能存在源端未產生DDL訊息,但同步仍然報錯的情況。

    說明

    為避免資料在某時間段內丟失或錯亂,禁止使用Rename命令將兩列的名稱互換。例如,將A列和B列的列名做了調換操作。

  • 原因:由於即時同步支援斷點續傳,為保障不遺失資料,在重啟即時同步回溯位點時可能會往前回溯一部分資料,此過程可能導致之前的DDL訊息再次被讀取而再次警示。

  • 解決方案:

    1. 當源端產生DDL變更時,手動在目標端資料庫進行相應的DDL變更。

    2. 啟動即時同步任務並變更DDL訊息處理策略,由出錯改為忽略

      說明

      由於斷點續傳還會訂閱到該DDL事件,為了避免任務依然失敗,所以暫時改為忽略。

    3. 停止即時同步任務並再次修改DDL訊息處理策略,由忽略還原為出錯,並再次重啟即時同步任務。

寫入目標資料來源時,對源端DDL及DML操作的注意事項

當源端新增列,並在目標端正常執行後,會有以下限制:

  • 當新增DEFAULT VALUE列後,目標表該新列不會有值,會一直為NULL,後續當源端新增列中新增資料時,即時同步任務會將新增資料同步至該列。

  • 當新增VIRTUAL列後,目標表該新列不會有值,會一直為NULL,後續當源端新增列中新增資料時,即時同步任務會將新增資料同步至該列。

MySQL和PolarDB MySQL源端即時同步,建議您在源端新增列時採用末尾追加列方式,不要採用在中間欄位加列方式。如果源端無法避免中間欄位加列,需要注意以下約束條件:

  • 全增量解決方案中,在全量同步階段不要進行中間欄位加列,否則會導致即時同步階段資料異常。

  • 即時同步階段,同步位點重設時間需要設定在中間欄位加列DDL事件之後,否則會導致後續即時同步資料異常。

如果發生資料異常,可以重新進行全量資料初始化方案(只需要將中間加列的表剔除,然後重新進行資料初始化,不需要將整個任務所有表進行全量初始化),恢複正確資料。

源表有預設值,通過Data Integration建立的目標表,預設值、非空屬性等會保留嗎?

建立目標表時候,DataWorks只會保留源表的列名、資料類型、注釋等資訊,不會保留源表的預設值、約束(包含非空約束、索引等)。

讀取Postgres的即時同步任務Failover了,延遲為什麼很大?

這是Postgres本身資料庫的特性,如果接受不了延遲,您可以停止任務,並重新啟動任務做一次全增量資料同步。

報錯資訊與解決方案

Kafka即時同步報錯: Startup mode for the consumer set to timestampOffset, but no begin timestamp was specified.

請重設啟動位點。即時同步報錯-kafka

MySQL即時同步報錯:Cannot replicate because the master purged required binary logs.

MySQL即時同步報錯:Cannot replicate because the master purged required binary logs. Replicate the missing transactions from elsewhere, or provision a new slave from backup.時,可能是因為在MySQL未找到消費位點的binlog記錄,請檢查您MySQL的binlog保留時間,同步任務啟動時請將該位點配置在這個時間範圍內。

說明

如果您訂閱不到binlog,可以嘗試重設位點到目前時間。

MySQL即時同步報錯:MySQLBinlogReaderException

MySQL即時同步報錯:MySQLBinlogReaderException: The database you are currently syncing is the standby database, but the current value of log_slave_updates is OFF, you need to enable the binlog log update of the standby database first. 時,可能是因為備庫沒有開啟binlog,如果您要同步備庫,需要做備庫級聯開啟binlog,可以找DBA尋求協助。

開啟binlog的操作詳情可參見步驟3:開啟MySQL的Binlog

MySQL即時同步報錯:show master status' has an error!

MySQL即時同步報錯:show master status' has an error!,報錯詳情為Caused by: java.io.IOException: message=Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation, with command: show master status時,可能是因為資料來源沒有開啟對應資料庫的許可權。

資料來源配置帳號需要擁有資料庫的SELECT、REPLICATION SLAVE、REPLICATION CLIENT許可權。給資料來源添加資料庫對應許可權的操作詳情可參見步驟2:建立帳號並配置許可權

MySQL即時同步報錯:parse.exception.PositionNotFoundException: can't find start position forxxx

同步未找到位點,請重設位點。

即時同步Hologres報錯:permission denied for database xxx

即時同步Hologres資料時,需要在Hologres給當前操作使用者Hologres執行個體的admin許可權(需要有建立schema的許可權),操作詳情可參見Hologres許可權模型概述

即時同步至MaxCompute報錯:ODPS-0410051:invalid credentials-accessKeyid not found

當即時同步至MaxCompute資料來源且使用臨時AK進行同步時,臨時AK超過7天會自動到期,同時,將導致任務運行失敗。平台檢測到臨時AK導致任務失敗時會自動重啟任務,如果任務配置了該類型的監控警示,您將會收到警示資訊。

即時同步至Oracle報錯:logminer doesn't init, send HeartbeatRecord

即時同步至Oracle任務在初始化找合適的同步位點時,需要載入上一份歸檔的日誌,如果歸檔日誌較大,則需要載入3~5分鐘才會完成初始化init階段。