MySQL 到 ClickHouse 数据同步优化(三)

server/2024/11/14 2:13:10/

简述

本文主要介绍 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.ppmy.cn/server/141363.html

相关文章

esayExcel根据模板导出包含图片

1、效果 2、模板 3、工具类代码 /*** 根据模板填充* param response* param templateStream 模板文件流* param map 模板文件所需要的参数* param list list循环模板参数* throws IOException*/public static void templateFilling(HttpServletRequest servletRequest,HttpServ…

【Docker】自定义网络:实现容器之间通过域名相互通讯

文章目录 一. 默认网络:docker0网络的问题二. 自定义网络三. nginx容器指之间通过主机名进行内部通讯四. redis集群容器(跳过宿主机)内部网络通讯1. 集群描述2. 基于bitnami镜像的环境变量快速构建redis集群 一. 默认网络:docker0…

【QML 与 C++ 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C++类,以及如何在C++ 中获取QML的内容

> 【QML 与 C 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C类,以及如何在C 中获取QML的内容-阿里云开发者社区 在同一可执行文件中,C和QML共享同一个进程,但是它们运行在不同的线程上。 在Qt中,C和QML都是在同一个进程中运行的&…

MyBatis操作--进阶

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 1. 动态SQL 动态SQL是Mybatis的强⼤特性之⼀&#xff0c;能够完成不同条件下不同的sql拼接 1.1 <if>标签 比如说注册…

工位管理现代化:Spring Boot企业级框架

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

爬虫学习5

selenium用法详解【从入门到实战】【Python爬虫】【4万字】_selenium用法详解4万字csdn-CSDN博客 MYSQL数据库 MongoDB数据库 selenium用法详解【从入门到实战】【Python爬虫】【4万字】_selenium用法详解4万字csdn-CSDN博客 redis数据库 黑马程序员Redis入门到实战教程&…

Word2Vec,此向量维度,以及训练数据集单条数据的大小,举例说明;Skip-gram模型实现词嵌入;热编码(One-Hot Encoding)和词向量;

目录 Word2Vec Word2Vec,此向量维度,以及训练数据集单条数据的大小,举例说明 一、Word2Vec的词向量维度 二、训练数据集单条数据的大小 综上所述 热编码(One-Hot Encoding)和词向量 一、表示方式 二、维度与计算效率 三、语义捕捉能力 四、举例说明 Skip-gram模…

使用 HTML、CSS 和 JavaScript 实现动态烟花效果

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…