CloudCanal x OceanBase 數據遷移同步優化

来源:https://www.cnblogs.com/clougence/archive/2023/04/27/oceanbase_change_data_capture_optimize_1.html
-Advertisement-
Play Games

簡述 CloudCanal 去年支持 OceanBase 數據遷移同步能力後,隨著使用用戶增多以及問題反饋,近期對該能力進行了一輪較大規模的優化。 本篇文章簡要介紹這些優化點,以及未來該能力的演進方向。 優化點 大幅提升同步性能 CloudCanal 目前使用 OceanBase LogProxy ...


簡述

CloudCanal 去年支持 OceanBase 數據遷移同步能力後,隨著使用用戶增多以及問題反饋,近期對該能力進行了一輪較大規模的優化。

本篇文章簡要介紹這些優化點,以及未來該能力的演進方向。

優化點

大幅提升同步性能

CloudCanal 目前使用 OceanBase LogProxy 做增量數據訂閱,使用方式相對簡單明瞭。

@Override
public void notify(LogMessage message) {
    try {
        ParsedEntry entry = msgConvertor.convertMsgToEntry(message);

        if (entry == null) {
            return;
        }

        instance.getEventStore().put(entry);
    } catch (Exception e) {
        String msg = "parse ob msg failed.msg:" + ExceptionUtils.getRootCauseMessage(e);
        log.error(msg, e);
        throw new LogProxyClientException(ErrorCode.E_PARSE, msg);
    }
}

消息解析對性能影響相對小,攢批對端寫入方式 影響更大。

攢批方面,我們將變更事件寫入記憶體隊列後,按照 個數/容量閾值(increBatchSize)超時時間(fetchFromBrokerTimeoutMs) 刷出,提升批量寫入的粒度。

對端寫入方式,根據不同數據源,我們採用了 batchmultisql並行upsert 等技術提升寫入效率。

統一各類表全量掃描方式

全量數據掃描 是 CloudCanal 全量數據遷移(或數據初始化)重要組成部分,需滿足 性能優秀(2KB/record,>= 100k records 掃描速率)、可斷點續傳可預測進度表相容性好 的要求。

其中前三者是業務要求,最後一種是儘可能滿足前三者的前提下,做到更多表的相容。

CloudCanal 碰到的"表"包含以下類型

  • 關係型資料庫
    • 無/單/多主鍵
    • 各種類型主鍵(整型/浮點/日期/二進位等)
    • 差異值主鍵(有/無符號,null值/空值,超長值)
    • 各種類型分區
    • 差異數據量(1萬,100萬,1000萬,1億,10億,100億)
    • 實體表/視圖/臨時表
  • 消息中間件
    • 各種命名規範
    • 無/有分區
    • 順序/非順序
  • 文檔資料庫
    • 規範/非規範(schemaless)
    • 無/有行業規範格式(ObjectId)
  • 緩存資料庫
  • 搜索引擎

CloudCanal 全量數據掃描主要面向關係型資料庫,性能要求斷點續傳能力進度預測能力都基於主鍵展開。

此次優化,我們做瞭如下幾方面工作,統一了掃描邏輯,並且讓無/單/多主鍵、各種類型主鍵、分區表都可斷點續傳

  • 主鍵分區作為斷點續傳位點
  • 掃描語句加入分區指定(如有)元組比較(單/多主鍵)按元組排序指定分頁數等部分
  • 對比位點最大值掃描行數方式判定掃描是否結束

此外,各個數據源可根據自身差異性,可擴展掃描語句最大最小位點值獲取邏輯鏈接自定義(設置超時等)執行語句上下文自定義(設置fetchSize等)

支持全局索引表

全局二級索引(GLOBAL)對分散式資料庫有著非常重要的作用,它讓原本 多分區數據檢索 操作 弱化成單分區檢索,加速不同維度點查響應,提升 QPS。

對於 OceanBase 對端寫入,CloudCanal 預設採用關係型資料庫 INSERT IGNORE/ON DUPLICATE KEY UPDATE 規避主鍵/唯一鍵衝突

但是對於帶有 GLOBAL 索引的表,OceanBase 不支持 INSERT IGNORE 操作,所以此次優化,我們寫入 OceanBase 的 INSERT 操作預設改為 ON DUPLICATE KEY UPDATE (REPLACE)。

異構 DDL 同步轉換優化

從異構資料庫同步 DDL 到 OceanBase,我們優化成白名單模式

如 MySQL 到 OceanBase DDL 同步,預設支持

  • ALTER TABLE xxx ADD/DROP/MODIFY COLUMN
  • CREATE INDEX
  • RENAME TABLE

優化同時去除了 ALTER TABLE xxx CHANGE COLUMNAFTER/BEFORE 等 OceanBase 現階段不支持的語句。

此項能力隨著 OceanBase 產品能力的進化而不斷豐富。

解決時間戳自更新問題

對於類似 gmt_create datetime/timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 時間欄位定義,當源端該欄位值變化區間小於時間精度(被程式判定未變化),並且寫入對端並非採用 upsert 方式(精確欄位更新),那麼該欄位數據將不一致。

CloudCanal 在精確欄位更新模式下,預設將時間欄位置為更新狀態,確保將源端值帶到對端,解決不一致的問題。

演進方向

OceanBase 商業級增量組件相容

OceanBase 商業版 OMS 的數據訂閱能力有別於目前社區版的 LogProxy,如 OceanBase 官方逐步擴大其使用面,CloudCanal 將第一時間跟進相容。

更快的數據校驗和訂正能力

分散式資料庫相對單機資料庫,單表數據量大幅度增加(億級表相當常見),數據校驗和訂正性能相比數據初始化,更加依賴數據掃描的性能,為此,CloudCanal 將開放 單表分片/分區並行掃描 的能力。

更強的結構遷移和 DDL 同步能力

大表 通用/特殊化分區 是常見操作,目前 CloudCanal 對錶分區的結構遷移並未有效支持,這種分區的結構遷移,對於同構資料庫相當必要。後續,我們將提供 分區信息的結構遷移

更多的數據源生態支持

以 OceanBase 為源端數據遷移同步,目前支持 MySQLStarRocksOceanBaseKafka 對端,我們希望後續如 RedisElasticSearchDorisHudi 等數據源也能加入到這個目標數據源中。

總結

本文主要介紹了 CloudCanal 在過去一段時間對 OceanBase 數據遷移同步能力的優化,從而是這個能力具備更強的性能更好的相容性更加穩定的數據遷移同步表現


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • (網路相關命令) 前言 這期呢主要說一說Linux中與網路相關命令,一共包含19個命令 測試主機之間網路是否聯通 1、簡介 ping 命令不管是在Windows還是Linux都是比較常用的命令。命令用於測試主機之間的網路連通性 2、語法格式 ping [參數選項] [目標主機] 3、參數說明 | 參 ...
  • 哈嘍大家好,我是鹹魚 今天我們來學習一下 Linux 操作系統核心之一:記憶體 跟 CPU 一樣,記憶體也是操作系統最核心的功能之一,記憶體主要用來存儲系統和程式的指令、數據、緩存等 關於記憶體的學習,我會儘量以通俗易懂的方式且分成多篇文章去講解 那麼今天在 pt.1 文章中,我們來學習一下 Linux 中 ...
  • 本文分享自天翼雲開發者社區《RPM常用命令以及組合使用場景》,作者:鄔祥釗 當涉及到管理基於 Red Hat 系的 Linux 系統時,RPM (Red Hat Package Manager) 是一個常用的軟體包管理器。以下是一些常用的 RPM 命令以及它們的組合使用場景: 常用命令: 1. rp ...
  • 本人習慣了Linux環境的du命令,在HP-UX下,發現du命令真的非常難用,有種讓人很難受的感覺。主要是因為HP-UX下的du命令參數比Linux平臺du命令參數要少很多,尤其是沒有-h這個參數,它只能以kb形式顯示文件/文件夾的大小,對於我來說,看起來非常不直觀。下麵是工作中,HP-UX平臺使用 ...
  • 環境: 工具:Firefox 84版本 或者 360游覽器-某特殊版本 系統版本:Windows 10 問題描述: 描述:進入某需要Flash插件的管理網站,使用edge等最新主流游覽器均無法調用Flash,開啟IE模式也沒有做用,網上的其他教程也因為時效性已經無法生效。 問題解釋: 解釋:各大主流 ...
  • 環境: 系統版本:Windows 10 家庭中文版 問題描述: 描述:按下Win+G後彈出提示框,需要使用新應用以打開此 ms-gamingoverlay 鏈接 問題解釋: 誤將Xbox game bar應用程式刪除了,無法找到啟動的程式。 這個程式我當時以為就是個打游戲的,我就刪除了,沒想到錄屏會 ...
  • 功能03-優惠券秒殺03 4.功能03-優惠券秒殺 4.6Redisson的分散式鎖 Redis分散式鎖—Redisson+RLock可重入鎖實現篇 4.6.1基於setnx實現的分散式鎖問題 我們在4.5自己實現的分散式鎖,主要使用的是redis的setnx命令,它仍存在如下問題: 4.6.2Re ...
  • 1)提升查詢效率 自動探測 SQL 複雜查詢條件預先合併成一個派生特征的 bitmap,預測和圈人時對複雜條件 SQL 重寫為派生特征。 2)提升導入速度 Spark 直接寫 Doris Tablet 文件,並掛載到 FE。 針對大導入場景與 Doris 團隊共建,提升寫入效... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...