当前位置: 首页 > article >正文

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 控制台,点击 数据源管理 > 新增数据源

步骤 3: 创建任务

  1. 点击 同步任务 > 创建任务
  2. 选择源和目标数据源,并分别点击 测试连接
  3. 目标端侧点开 高级选项,选择表引擎为 ReplacingMergeTree (或 ReplicatedReplacingMergeTree)。
  4. 选择 数据同步 并勾选 全量初始化。建议规格至少选择 1 GB。过小的规格可能导致任务运行时内存溢出(OOM)。
  5. 选择需要同步的表、列。
  6. 点击 确认创建,完成任务创建。

步骤 4: 验证数据

  1. 停止源端写入负载,并等待 ClickHouse 合并。
    因 ClickHouse 自动合并时机不定,可能会导致数据校验显示不准。
    可执行 optimize table xxx final 进行手动合并(有一定概率无法成功)。
    另外也可执行 create view xxx_v as select * from xxx final 命令,创建视图,对视图进行查询,以确保数据完全合并。

  2. 创建一个校验任务,任务完成后显示,源对端数据完全一致。

总结

本文简要介绍了 CloudCanal 实现 MySQL到 ClickHouse 数据迁移同步的能力,帮助业务快速构建实时数据分析环境。


http://www.kler.cn/a/385389.html

相关文章:

  • java导出word文件(手绘)
  • Redis 中 Bitmap 原理和应用
  • Redis-07 Redis哨兵
  • Elasticsearch(三):Elasticvue使用及DSL执行新增、查询操作
  • Flutter 鸿蒙next 中使用 MobX 进行状态管理
  • MySQL:表的增删改查(进阶)
  • Redis3:Hash类型、List类型、Set类型、SortedSet类型
  • Am I Isolated:一款安全态势基准测试工具
  • 【数据集】【YOLO】【目标检测】摔跤识别数据集 5097 张,YOLO行人摔倒识别算法实战训练教程!
  • 自动打电话机器人,好用吗?
  • Trimble X12三维激光扫描仪正在改变游戏规则【上海沪敖3D】
  • UE4/5 编译报错 MSB3073
  • 【Python图像处理】进阶实战指南
  • Spark集群模式搭建之Yarn模式
  • NoETL自动化指标平台为数据分析提质增效,驱动业务决策
  • 域名+服务器+Nginx+宝塔使用SSL证书配置HTTPS
  • 营业执照OCR识别API接口如何用C#调用
  • 系统架构设计师论文:论基于构件的软件开发方法及其应用
  • 【Linux】拆分详解 - vim / gcc / makefile
  • 硬币游戏赢家 | 动态规划
  • 【论文笔记】Token Turing Machines
  • 【目标跟踪】目标跟踪算法资料笔记
  • 【Python】轻松实现机器翻译:Transformers库使用教程
  • [linux]docker项目部署
  • 【论文笔记】VCoder: Versatile Vision Encoders for Multimodal Large Language Models
  • 100+SCI科研绘图系列教程(R和python)