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 定义。
操作示例
步骤 1: 安装 CloudCanal
请参考 全新安装(Docker Linux/MacOS),下载安装 CloudCanal 私有部署版本。
步骤 2: 添加数据源
登录 CloudCanal 控制台,点击 数据源管理 > 新增数据源。