簡述
本文主要介紹 CloudCanal 如何將關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)同步到 ClickHouse缩功,默認(rèn)使用 ReplacingMergeTree 作為 ClickHouse 表引擎,鏈路特點包括:
- 新增
_version
倚聚、_sign
字段给赞,以便 ClickHouse 準(zhǔn)確合并喻喳。 - DML 操作均以 INSERT 寫入幽污,同步性能良好。
- 支持 DDL 同步悔橄。
技術(shù)點
結(jié)構(gòu)遷移
以 ClickHouse 為對端的結(jié)構(gòu)遷移绒疗,默認(rèn)選擇 ReplacingMergeTree 作為表引擎侵歇,如果帶有副本,則自動選擇 ReplicatedReplacingMergeTree吓蘑。
ClickHouse 表 sort key 默認(rèn)選擇源端表主鍵字段惕虑,如源端表無主鍵,則選擇 tuple()磨镶。
額外新增 _version
溃蔫、_sign
作為合并字段,同步過程中 CloudCanal 根據(jù)數(shù)據(jù)操作自動填充值琳猫,確保鏈路兩端數(shù)據(jù)一致伟叛。
如下示例:
CREATE TABLE console.worker_stats
(
`id` Int64,
`gmt_create` DateTime,
`worker_id` Int64,
`cpu_stat` String,
`mem_stat` String,
`disk_stat` String,
`_sign` UInt8 DEFAULT 0,
`_version` UInt64 DEFAULT 0,
INDEX `_version_minmax_idx` `_version` TYPE minmax GRANULARITY 1
)
ENGINE = ReplacingMergeTree(`_version`,`_sign`)
ORDER BY id
SETTINGS index_granularity = 8192
數(shù)據(jù)寫入
全量遷移和增量同步所有操作均轉(zhuǎn)換成 INSERT,并以標(biāo)準(zhǔn) batch 寫入脐嫂。
_version
字段值按照數(shù)據(jù)變更順序進(jìn)行自增统刮。_sign
字段中 INSERT & UPDATE 操作值為 0紊遵,DELETE 操作值為 1。
新增字段符合 ClickHouse ReplacingMergeTree 定義侥蒙。
操作示例
步驟 1: 安裝 CloudCanal
請參考 全新安裝(Docker Linux/MacOS)暗膜,下載安裝 CloudCanal 私有部署版本。
步驟 2: 添加數(shù)據(jù)源
登錄 CloudCanal 控制臺鞭衩,點擊 數(shù)據(jù)源管理 > 新增數(shù)據(jù)源学搜。
步驟 3: 創(chuàng)建任務(wù)
- 點擊 同步任務(wù) > 創(chuàng)建任務(wù)。
- 選擇源和目標(biāo)數(shù)據(jù)源论衍,并分別點擊 測試連接瑞佩。
- 目標(biāo)端側(cè)點開 高級選項,選擇表引擎為 ReplacingMergeTree (或 ReplicatedReplacingMergeTree)坯台。
- 選擇 數(shù)據(jù)同步 并勾選 全量初始化炬丸。建議規(guī)格至少選擇 1 GB。過小的規(guī)格可能導(dǎo)致任務(wù)運行時內(nèi)存溢出(OOM)捂人。
- 選擇需要同步的表御雕、列。
- 點擊 確認(rèn)創(chuàng)建滥搭,完成任務(wù)創(chuàng)建。
步驟 4: 驗證數(shù)據(jù)
停止源端寫入負(fù)載捣鲸,并等待 ClickHouse 合并瑟匆。
因 ClickHouse 自動合并時機不定,可能會導(dǎo)致數(shù)據(jù)校驗顯示不準(zhǔn)栽惶。
可執(zhí)行optimize table xxx final
進(jìn)行手動合并(有一定概率無法成功)愁溜。
另外也可執(zhí)行create view xxx_v as select * from xxx final
命令,創(chuàng)建視圖外厂,對視圖進(jìn)行查詢冕象,以確保數(shù)據(jù)完全合并。創(chuàng)建一個校驗任務(wù)汁蝶,任務(wù)完成后顯示渐扮,源對端數(shù)據(jù)完全一致。
總結(jié)
本文簡要介紹了 CloudCanal 實現(xiàn) MySQL到 ClickHouse 數(shù)據(jù)遷移同步的能力掖棉,幫助業(yè)務(wù)快速構(gòu)建實時數(shù)據(jù)分析環(huán)境墓律。