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

news/2024/11/8 23:47:18 标签: 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.niftyadmin.cn/n/5744571.html

相关文章

量化研究--年化57%全球动量模型策略回测,学习使用

文章声明:本内容为个人的业余研究,和任何单位,机构没有关系,文章出现的股票代码,全部只是测试例子,不做投资参考,投资有风险,代码学习使用,不做商业用途 本文利用全球动量模型策略回…

SpringBoot整合Liquibase对数据库管理和迁移

简介 Liquibase是一个用于用于跟踪、管理和应用数据库变化的开源工具,通过日志文件(changelog)的形式记录数据库的变更(changeset),然后执行日志文件中的修改,将数据库更新或回滚(rollback)到一致的状态。它的目标是提供一种数据库类型无关的…

Kafka面试题 part-1

一、kafka消息发送的流程? 发送原理: 在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator,Sender 线程不断从 R…

stm32使用串口DMA实现数据的收发

前言 DMA的作用就是帮助CPU来传输数据,从而使CPU去完成更重要的任务,不浪费CPU的时间。 一、配置stm32cubeMX 这两个全添加上。参数配置一般默认即可 代码部分 只需要把上期文章里的HAL_UART_Transmit_IT(&huart2,DATE,2); 全都改为HAL_UART_Tra…

【宝藏】浏览器端的模块化问题(1)

接下来我们一起进入webpack的课程学习中,本课程的特点在于: 合适的深度:webpack 使用层面相对简单,但其原理层面非常复杂。合适的广度:webpack 生态圈极其繁荣,有海量的第三方库可以融入到 webpack 中。 …

ubuntu离线部署ollama

一、ollama部署 1、ollama官网安装教程,可以参考这个进行部署,下载对应版本 以intel为例下载安装包 curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz sudo tar -C /usr -xzf ollama-linux-amd64.tgz2、运行安装…

【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案

作者:CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境:WebStorm 目录 问题概述 原因 解决方案 解决方法 潜在问题修改 最终效果呈现 额外内容 管理员界面路由配置 WebStorm背景更换 法一: 法二: 问题概…

esp32学习:利用虫洞ESP32开发板,快速实现无线图传

我们的虫洞开发板,能够完美运行esp who AI代码,所以实现无线图传那是非常容易的,我们先看看examples目录: 里面有比较多的web例程,在这些例程下,稍作修改,就可以快速实现我的图传无线功能&#…