使用ETLCloud实现CDC实时数据集成:从MySQL到ClickHouse的实时数据同步

背景

在上一篇文章中体验了 ETLCloud 的离线数据迁移功能,就像大数据领域里有离线计算和实时计算, ETLCloud 还提供了基于 CDC (Change Data Capture)的实时数据集成功能:实时数据集成是指通过变化数据捕获技术( CDC )实时监测数据库中的变化数据,并捕获这些变化数据传输到 MQ 或数据库中提供给目标端消费。
今天以单表的 CDC 为例来体验下 ETLCloud 的实时数据集成功能,循序渐进,后续再实践下将多数据源或者多个表合并为大宽表。
依然使用诗词数据库,对数据库中的诗词表数据进行近实时的监听;依托  ETLCloud  的 CDC 功能,借助 MySQLbinlog 机制(即 MySQL 主从同步的原理,我们熟悉的阿里开源的 Canal 同步工具,同样利用的这一原理,包括:基于语句和基于行的复制;无论是基于语句的复制,还是基于行的复制,都是通过在主库上记录二进制日志,在从库上重放日志的方式实现异步的数据复制)实现从 MySQLClickHouse 的实时数据同步。

数据集

MySQL数据库中的库表 poetry 结构如下,数据量: 311828

CREATE TABLE `poetry` (`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,`title` VARCHAR(150) NOT NULL COLLATE 'utf8mb4_unicode_ci',`yunlv_rule` TEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',`author_id` INT(10) UNSIGNED NOT NULL,`content` TEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',`dynasty` VARCHAR(10) NOT NULL COMMENT '诗所属朝代(S-宋代, T-唐代)' COLLATE 'utf8mb4_unicode_ci',`author` VARCHAR(150) NOT NULL COLLATE 'utf8mb4_unicode_ci',PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=311829;

ClickHouse 中的建表语句:

CREATE TABLE poetry.poetry (`id` Int32, `title` String, `yunlv_rule` String, `author_id` Int32, `content` String, `dynasty` String, `author` String) ENGINE = MergeTree() PRIMARY KEY id ORDER BY id SETTINGS index_granularity = 8192

3-TableDesc.jpg

Note:这里采用 MergeTree 引擎,如果使用 MySQL 引擎,后续的大数据查询分析效率会很低。。

基础环境

数据库服务部署在多云环境下,共涉及到3台云主机,操作系统及配置如下:

  1. MySQL所在主机(阿里云)
    操作系统:Ubuntu16
root@ali:~# uname -a
Linux ali 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linuxroot@iZuf69c5h89bkzv0aqfm8lZ:~# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.2 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.2 LTS"
VERSION_ID="16.04"

基本配置:2C8G
数据库版本:5.7.22-0ubuntu0.16.04.1

  1. ClickHouse所在主机(华为云)
    操作系统:CentOS 6
[root@ecs-xx-0003 ~]# uname -a
Linux ecs-xx-0003 2.6.32-754.15.3.el6.x86_64 #1 SMP Tue Jun 18 16:25:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@ecs-xx-0003 ~]# cat /proc/version 
Linux version 2.6.32-754.15.3.el6.x86_64 (mockbuild@x86-01.bsys.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) ) #1 SMP Tue Jun 18 16:25:32 UTC 2019

基本配置:4C8G
数据库版本:19.9.5.36

[root@ecs-xx-0003 clickhouse-server]# clickhouse-server --version
ClickHouse server version 19.9.5.36.
  1. ETLCloud所在主机(本地虚拟机)
    操作系统:CentOS 7
    基本配置:2C4G

Note:上一篇用到的腾讯云主机到期释放了,就在本地虚拟机使用 Docker 重新部署了一套 ETLCloud ,这里选择的是社区版,采用 Docker 部署的方式轻量、快速启动: docker pull ccr.ccs.tencentyun.com/restcloud/restcloud-etl:V2.2

实时数据同步实践

接下来,进入我们的实时数据同步实践:全程零代码、可视化、鼠标点一点即可完成从 MySQLClickHouse 的实时数据同步。

开启MySQL的CDC

我的 MySQL 服务部署在阿里云的 Ubuntu 上,编辑配置文件: vi /etc/mysql/my.cnf

[mysqld]
log-bin=db218-bin
server-id=218
binlog-do_db=poetry # 开启指定库的binlog
binlog-format=row # 设置二进制日志格式为行级别,这是支持CDC必须的

1-OpenBinlog.jpg

2-ConfirmBinlog.jpg

数据源配置

共涉及两个数据源 MySQLClickHouse ,直接选择对应的数据库,配置好地址、端口、用户名密码,测试连接成功即可。

新增监听器

从首页的实时数据集成——>数据库监听器——>新增监听器。
选择前面创建的 MySQL 数据源,采用白名单方式,可以自动载入数据库和数据表进行下拉选择。

4-Config1.jpg

采用最简单“直接传输到目标库”的方式实现 CDC 数据同步,选择前面创建的 ClickHouse 数据源。

4-Config2.jpg

如果希望同步历史数据,可以选择全量+增量。

4-Config3.jpg

之后,便可以启动监听,理论上对数据表的查询、修改以及删除操作均会被监听到。

测试语句准备

在实际测试 CDC 近实时的实际同步前,我先用 ChatGPT 生成了一首唐诗:模仿李白的风格,作一首以端午为主题的七言绝句。

粽叶飘香端午至,龙舟竞渡水波涛。五月初五传古意,粽香扑鼻诗情高。

INSERT INTO `poetry` (`id`, `title`, `yunlv_rule`, `author_id`, `content`, `dynasty`, `author`) VALUES (311829, '端午', '七律测试', 105, '叶飘香端午至,龙舟竞渡水波涛。五月初五传古意,粽香扑鼻诗情高。', 'T', '李白');UPDATE poetry SET yunlv_rule = "七律更新" WHERE id = 311829;DELETE FROM poetry WHERE id = 311829;INSERT INTO `poetry` (`title`, `yunlv_rule`, `author_id`, `content`, `dynasty`, `author`) VALUES ('端午', '七律插入', 105, '叶飘香端午至,龙舟竞渡水波涛。五月初五传古意,粽香扑鼻诗情高。', 'T', '李白');

插入测试

在MySQL中执行以下插入语句,然后查看下 ETLCloud 的可视化数据统计,再到 ClickHouse 端确认下新增的数据是否同步成功。

-- 指定ID插入
INSERT INTO `poetry` (`id`, `title`, `yunlv_rule`, `author_id`, `content`, `dynasty`, `author`) VALUES (311829, '端午', '七律测试', 105, '叶飘香端午至,龙舟竞渡水波涛。五月初五传古意,粽香扑鼻诗情高。', 'T', '李白');

Note:由于这里用的 ClickHouse 版本较低,还没有提供 Web 版的 PlayGround ,就直接通过命令行客户端进行连接查询了。

5-Insert1.jpg5-Insert3.jpg

-- 省略ID插入,主键自增
INSERT INTO `poetry` (`title`, `yunlv_rule`, `author_id`, `content`, `dynasty`, `author`) VALUES ('端午', '七律插入', 105, '叶飘香端午至,龙舟竞渡水波涛。五月初五传古意,粽香扑鼻诗情高。', 'T', '李白');

9-Insert.jpg

更新测试

在  MySQL 端执行更新语句。

UPDATE poetry SET yunlv_rule = "七律更新" WHERE id = 311829;

删除测试

在  MySQL  端执行删除语句。

DELETE FROM poetry WHERE id = 311829;

6-UpdateDelete.jpg

问题记录

  • 修改了MySQL配置,开启binlog后,无法启动了(当然,我恢复了配置依然无法启动)。。

问题描述:

root@ali:/var/lib/mysql# systemctl start mysql.service

Job for mysql.service failed because the control process exited with error code. See “systemctl status mysql.service” and “journalctl -xe” for details.

解决方法:将日志文件所在目录/var/log和进程pid文件所在目录/var/run/加入到mysql访问组

root@ali:/var/log/mysql# chown -R mysql:mysql /run/mysqld
root@ali:/var/log/mysql# chown -R mysql:mysql /var/run/mysqld
root@ali:/var/log/mysql# chown -R mysql:mysql /var/log/mysql

经过测试发现,对于新增操作(无论是指定 ID 插入,还是省略 ID 插入,借助主键自增策略), CDC 都可以实时同步到 ClickHouse ,但是当更新、删除数据时,同步出现异常;对于异常数据,实时数据传输时会记录下来,可以到“异常数据”的 Tab 下查看具体的异常数据及出错原因。

  • 更新操作无法同步到ClickHouse

7-Update.jpg

问题描述:Query must be like ‘INSERT INTO [db.]table [(c1, c2, c3)] VALUES (?, ?, ?)’. Got: alter table poetry update id=?, title=?, yunlv_rule=?, author_id=?, content=?, dynasty=?, author=? where id=?
问题分析: ClickHouse 中没有 dual 虚拟表,它的虚拟表是 system.one

  • 删除操作无法同步到ClickHouse

8-Delete.jpg

问题描述:数据删除异常: ClickHouse exception, code: 62, host: 139.9.172.55, port: 8123; Code: 62, e.displayText() = DB:: Exception: Syntax error: failed at position 1: delete from poetry where id=311829. Expected one of: ATTACH, DETACH, DROP, SHOW, USE, SELECT, WITH, KILL, TRUNCATE, DESC, DESCRIBE, SYSTEM query, SELECT subquery, list of elements, ALTER query, ALTER TABLE, EXISTS, CREATE TABLE or ATTACH TABLE query, Query with output, SHOW PROCESSLIST query, SHOW PROCESSLIST, RENAME query, RENAME TABLE, SELECT query, possibly with UNION, SET query, SHOW [TEMPORARY] TABLES|DATABASES [[NOT] LIKE ‘str’], EXISTS or SHOW CREATE query, SELECT query, subquery, possibly with UNION, USE query, CHECK TABLE, DESCRIBE query, DROP query, INSERT query, INSERT INTO, KILL QUERY query, OPTIMIZE query, OPTIMIZE TABLE, SELECT query, CREATE, SET, Query (version 19.9.5.36)

问题分析: ClickHouse 中的删除操作与MySQL中不一样, ClickHouse 通过 alter 方式实现更新、删除,把 updatedelete 操作叫做 mutation (突变)。语法为:

ALTER TABLE [db.]table DELETE WHERE filter_expr
ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr

区别:标准 SQL 的更新、删除操作是同步的,即客户端要等服务端反回执行结果(通常是 int 值);而 ClickHouseupdatedelete 是通过异步方式实现的,当执行 update 语句时,服务端立即反回,但是实际上此时数据还没变,而是排队等着。按照官方的说明, update/delete 的使用场景是一次更新大量数据,不建议一次只更新一条数据。

总结

以上就是基于 ETLCloud 实时数据集成功能实现的单表 CDC 数据从 MySQLClickHouse 的同步实践,不过可能因为目标库为 ClickHouse ,其更新、删除操作与传统的关系型数据库的标准 SQL 有所区别,导致更新和删除数据的操作未能成功同步,这个问题已反馈给官方技术人员。
ETLCloud 提供了实时数据传输统计图形展示,对同步的进度及异常数据进行近实时的监控。

5-Insert2.jpg

Reference

  • ETLCloud官方文档
  • ClickHouse官方文档
  • https://blog.csdn.net/wyq/article/details/124203649

If you have any questions or any bugs are found, please feel free to contact me.
Your comments and suggestions are welcome!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/169521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】数据库基础操作

👑专栏内容:MySQL⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、数据库操作1、创建数据库2、查看所有数据库3、选定指定数据库4、删除数据库 二、数据表操作1、创建数据表2、查看所有表3、…

1.Linux基础命令

1.打开命令窗口 crtlaltt 2.显示当前目录中的文件 ls 3.创建目录/文件夹 mkdir 文件名 4.进入文件夹 cd 目录 cd . .回到上一级目录 cd . ./. ./回到上上级目录 5.创建文本 gedit 文本名 6.删除文件 删除文件夹 rm -r 文件名(强制删除) 删除文本 rm…

python -opencv 图像锐化

python -opencv 图像锐化 图像锐化其实,是一种增强图片对比度的技术,我们可以通过计算图像的导数,把导数绝对值数值大于零的数值加回原图像,通过这种方法,可以增强图像的对比度。 实现代码如下: import c…

3、点亮一个LED

新建工程 project—>New uVision Project LED介绍 中文名:发光二极管 外文名:Light Emitting Diode 简称:LED 用途:照明、广告灯、指引灯 电路图分析 进制的转换 生成下载文件: 代码 //导包 #inclu…

【从浅识到熟知Linux】基本指定之find、grep、head和tail

🎈归属专栏:从浅学到熟知Linux 🚗个人主页:Jammingpro 🐟每日一句:一篇又一篇,学写越上头。 文章前言:本文介绍find、grep、head和tail指令用法并给出示例和截图。 文章目录 find基本…

大中小协作 共筑科学梦——华中科技大学附属花城中学举办首届科技节

为普及科学知识,张扬科学精神,创设浓郁的科学氛围,11月24日,华中科技大学附属花城中学举办了以“走近科学,触碰未来”为主题的首届科技节暨科创文化展示周活动。学生们在学习中感受科技的魅力,在“玩”中感…

实现简单的操作服务器和客户端(上)

一、说明 描述:本教程介绍如何使用 simple_action_server 库创建斐波那契动作服务器。此示例操作服务器生成斐波那契序列,目标是序列的顺序,反馈是计算的序列,结果是最终序列。 内容 创建操作消息编写一个简单的服务器 代码

【LM、LLM】浅尝二叉树在前馈神经网络上的应用

前言 随着大模型的发展,模型参数量暴涨,以Transformer的为组成成分的隐藏神经元数量增长的越来越多。因此,降低前馈层的推理成本逐渐进入视野。前段时间看到本文介绍的相关工作还是MNIST数据集上的实验,现在这个工作推进到BERT上…

[极客大挑战 2019]Secret File1

[极客大挑战 2019]Secret File1 在bp里面发现secr3t.php 将secr3t.php 直接加在网站后面,发现了有关flag的信息,一个flag.php文件 在遇到flag.php时候,联想到php伪协议,构造伪协议方式 secr3t.php?filephp://filter/readconver…

0002Java程序设计-springboot在线考试系统小程序

文章目录 **摘 要****目录**系统实现开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅🐧裙:776871563 摘 要 本毕业设计的内容是设计并且实现一个基于springboot的在线考试系统小程序。它是在Windows下,以MYSQL为数据库开发平台&…

FFmpeg零基础学习(一)——初步介绍与环境搭建

目录 前言正文一、开发环境二、搭建环境三、测试代码四、调用库的介绍End、遇到的问题2、Qt 在线安装容易报错,断开问题1、在线安装QMaintainTool很慢2、Qt5.15 无法调试FFmpeg 参考 前言 FFmpeg是一个开源的跨平台多媒体处理框架,它包含了一组用于处理…

【图解系列】一张图带你了解 DevOps 生态工具

一张图带你了解 DevOps 生态工具 ✅ 协作(Collaborate):JIRA、Confluence 大家肯定不陌生了,我之前也写过利用 Jekyll 搭建个人博客的帖子。✅ 构建(Build):常用的 SCM(Software Con…

掌握未来技术趋势,成为领先者——深度解析2023年技术热点

掌握未来技术趋势,成为领先者——深度解析2023年技术热点 摘要:本文探讨当前最热门的技术趋势。我们将介绍人工智能、大数据、区块链、5G等前沿技术,并阐述它们如何改变我们的生活。最后,我们将总结如何利用这些技术趋势&#xf…

2024年天津天狮学院专升本计算机科学与技术《数据结构》考试大纲

2024年天津天狮学院计算机科学与技术专业高职升本入学考试《数据结构》考试大纲 一、考试性质 《数据结构》专业课程考试是天津天狮学院计算机科学与技术专业高职升本入学考 试的必考科目之一,其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试…

Word打印模板,打印效果更出众丨三叠云

Word打印模板 路径 表单设置 >> 打印设置 功能简介 新增「Word打印模板」(beta版)。 Word 打印模板是指,在 Word 文档的基础上插入表单中的字段代码,打印时即可根据 Word 文档的格式,对表单数据进行个性化打印。 Word 打印模板能…

matlab不用sawtooth,自己写代码实现锯齿波/三角波

matlab自己写代码实现锯齿波/三角波 为什么要自己写代码,不用现成的函数sawtooth? 函数sawtooth的采样频率是固定的,也就是给定一个时间段,只能按照固定的频率取点。比如10s内,每1s取一个点。这样就得到了1s 2s 3s……

激活函数与其导数:神经网络中的关键元素

激活函数是神经网络中的重要组成部分,有力地推动了深度学习的发展。然而,仅仅了解和选择激活函数是不够的,我们还需要理解激活函数的导数。本文将详细介绍激活函数的概念、作用及其导数的重要性,并探究导数对神经网络训练的影响。…

【室内定位系统源码】UWB超宽带定位技术的特点和应用前景

uwb人员、物品定位系统源码,智慧工厂人员安全管理定位,高精度定位系统源码 UWB超宽带定位技术概念: 超宽带无线通信技术(UWB)是一种无载波通信技术,UWB不使用载波,而是使用短的能量脉冲序…

Presto+Alluxio数据平台实战

数新网络,让每个人享受数据的价值https://xie.infoq.cn/link?targethttps%3A%2F%2Fwww.datacyber.com%2F 一、Presto & Alluxio简介 Presto Presto是由Facebook开发的开源大数据分布式高性能 SQL查询引擎。 起初,Facebook使用Hive来进行交互式查询…

AI创作工具:Claude2注册保姆级教程

最近软件打算多接入几个AI写作平台,包括讯飞星火,百度文心,Claude2,这样就能给用户提供更多的写作选择 经过半天的调研,讯飞星火,百度文心一言,接入都比较简单,毕竟是国内的。 在调…