MySQL 到 ClickHouse 同步
简述
本文主要介绍 CloudCanal 如何将关系型数据库中数据同步到 ClickHouse, 默认使用 ReplacingMergeTree 作为 ClickHouse 表引擎, 链路特点包括
- 新增 _version, _sign 字段,以便 ClickHouse 准确合并
- DML 操作均以 INSERT 写入,同步性能良好
- 支持 DDL 同步
技术点
结构迁移
以 ClickHouse 为对端的结构迁移,默认选择 ReplacingMergeTree 作为表引擎,如果带有副本,则自动选择 ReplicatedReplacingMergeTree。
ClickHouse 表 sort key 默认选择源端表主键字段,如源端表无主键,则选择 tuple()。
额外新增 _version
,_sign
作为合并字段,同步过程中 CloudCanal 根据数据操作自动填充值,确保链路两端数据一致。
如下示例:
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
写数据
全量迁移和增量同步所有操作均转换成 INSERT ,并以标准 batch 写入。
_version
字段值按照数据变更顺序进行自增。
_sign
字段 INSERT & UPDATE 操作值为 0,DELETE
操作值为 1。
新增字段符合 ClickHouse ReplacingMergeTree 定义。
操作示例
下载安装 CloudCanal 私有部署版本。
造 Insert、Update负载,比例为 1:2 。
登录 CloudCanal 控制台 > 数据源管理 > 添加数据源。
同步任务 > 创建任务。
选择数据源,并测试连接成功。
信息ClickHouse 侧点开高级选项,选择表引擎为 ReplacingMergeTree (或 ReplicatedReplacingMergeTree)。
点击下一步。
选择 数据同步,并勾选 数据初始化
信息建议规格至少选择 1 GB,过小的规格可能导致任务运行时 OOM。
点击下一步。
选择需要同步的表,点击下一步。
选择列,默认即可,点击下一步。
点击 创建确认 完成任务创建。
等待任务自动 结构迁移、全量迁移、数据同步 追上。
停止源端写入负载,并等待 ClickHouse 合并。
信息因 ClickHouse 自动合并时机不定,可执行
optimize table xxx final
进行手动合并(有一定概率也无法成功)。另外也可选择创建一张视图,对视图进行查询,
create view xxx_v as select * from xxx final
创建一个校验任务,跑完结果一致。
总结
本文简要介绍了 CloudCanal 实现 MySQL到 ClickHouse 数据迁移同步的能力,帮助业务快速构建实时数据分析环境。