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.xdnf.cn/news/8880.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【日志】392.判断子序列

2024.11.8 【力扣刷题】 392. 判断子序列 - 力扣(LeetCode)https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150 整个题从一开始就是打算从双指针的思想往下走的。但是,我设置了四个变量sLeft…

07 Lambda和StreamAPI

目录 1.Lambda表达式 语法格式: 简单示例 2.函数式接口 常见的函数式接口 1. Supplier 2. Consumer 3. Function,> 4. Predicate 总结 3.流式编程——StreamAPI 基本概念 常见的 Stream 操作 1. 创建 Stream 2. 中间操作 3. 终端操作 简单练习 …

TMDOG的Gin学习笔记_02——Gin集成支付宝支付沙箱环境

TMDOG的Gin学习笔记_02——Gin集成支付宝支付沙箱环境 博客地址:TMDOG的博客 作者自述: 最近忙着整理自己的项目代码,终于有时间更新一下博客。这次的内容是关于如何在Gin框架下集成支付宝的支付沙箱环境,具体包括如何初始化支付…

Docker网络概述

1. Docker 网络概述 1.1 网络组件 Docker网络的核心组件包括网络驱动程序、网络、容器以及IP地址管理(IPAM)。这些组件共同工作,为容器提供网络连接和通信能力。 网络驱动程序:Docker支持多种网络驱动程序,每种驱动程…

OpenHarmony4.1蓝牙芯片如何适配?触觉智能RK3568主板SBC3568演示

当打开蓝牙后没有反应时,需要排查蓝牙节点是否对应、固件是否加载成功,本文介绍开源鸿蒙OpenHarmony4.1系统下适配蓝牙的方法,触觉智能SBC3568主板演示 修改对应节点 开发板蓝牙硬件连接为UART1,修改对应的节点,路径为…

QT 如何使QLabel的文字垂直显示

想要实现QLabel文字的垂直显示,可以通过使用“文字分割填充换行符”的方式来实现QLabel文字垂直显示的效果,下面是效果图: 具体实现代码: #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow:…

数据结构选择题及答案

一、选择题 1、下列查找方法中,( )适用于查找有序单链表。 A.分块查找; B.哈希查找; C.顺序查找; D.二分查找; 2、在有n个结点的二叉树的二叉链表表示中,空指针数为( )。 A&#xf…

2024上半年上午30

CPU没有减法器的说法

php实现excel表格数据快速入库

项目场景:大概有一百来份excel表格数据需要整理入库,基础字段一样,如果按照传统的处理方法,需要先整理好数据(数据清洗、合并等),并且按照系统导入模板整理出来,费时费力。 需要解决…

【青牛科技】GC5931:工业风扇驱动芯片的卓越替代者

在工业领域,工业风扇的稳定高效运行对于维持良好的生产环境至关重要。而驱动芯片作为工业风扇控制系统的核心元件,其性能直接影响风扇的工作状态。芯麦 GC5931 作为一款新型驱动芯片,在替代 A5931/Allegro 应用于工业风扇中展现出了非凡的优势…

CST案例分析:TLM算法仿真5G毫米波手机天线和整机

5G时代,产品复杂,更新换代快,如何快速仿真不同的设计版本是影响研发效率的关键问题。本期我们用达索系统SIMULIA自己的手机模型来演示5G毫米波的仿真。 (图片仅为概念演示,未经达索系统授权不得使用) 完整的…

小猿口算炸鱼脚本

目录 写在前面: 一、关于小猿口算: 二、代码逻辑 1.数字识别 2.答题部分 三、代码分享: 补充:软件包下载 写在前面: 最近小猿口算已经被不少大学生攻占,小学生直呼有挂。原本是以为大学生都打着本…

【debug】QT 相关问题error汇总

总结一下碰到过的所有问题error以及解决方案 qt的UI更新之后构建后发现没有变化 取消项目中的Shadow build的勾选,作用是取消影子构建,此后构建目录与源码处于同一目录,每次编译更新程序使用的UI文件error: ‘class QWidget’ has no member…

滑动窗口最大值

239. 滑动窗口最大值 - 力扣(LeetCode) 题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 …

GEE 案例——利用哨兵-2 图像时间序列和谷歌地球引擎云计算自动绘制和监测香港海洋水质参数

目录 简介 结论 代码 结果 APP链接 引用 简介 对沿海水质的持续监测对于水资源管理和海洋生态系统的可持续性至关重要。 遥感数据(如哨兵-2 卫星图像)可提供用于时间序列分析的高分辨率观测数据,而基于云的谷歌地球引擎(GE…

Redis4:Redis的Java客户端

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…

基于Java Web的传智播客crm企业管理系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

【Eclipse系列】eclipse安装与常规配置(含插件)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、下载与安装 二、常规设置 1.1.设置工作空间(workspace) 1.2.设置字体和字体大小 ​编辑 1.3.设置编码 1.4.去除验证(validation) 1.5.去除单词验证(spelli…

抗辐照MCU芯片工艺解析:如何保障芯片的可靠性

行星探索、轨道飞行器任务和空间研究在内的太空项目需要创新的航天器系统技术提供通信与处理功能。随着商业航天的发展,对于航天电子系统需要考虑高可靠与高性能的同时,还需要考虑降低开发成本和缩短上市时间。 以MCU芯片AS32A401为例,该芯片…

qt QKeySequence详解

1、概述 QKeySequence 是 Qt 框架中的一个类,用于表示和处理键盘快捷键序列。它提供了一种方便的方式来解析、存储和比较键盘快捷键,这些快捷键通常用于触发应用程序中的特定操作或命令。QKeySequence 支持多种格式的快捷键表示,包括单个按键…