简述
CloudCanal 2.X 版本近期反对了自定义代码能力,带来了丰盛的场景化数据能力,本文次要介绍在面向 To C 业务分库分表状况下,如何通过 CloudCanal 进行数据实时汇聚。
本计划特点:
- 数据处理灵便,适配多变的业务数据汇聚需要
- 针对大部分带构造数据源互通,可触类旁通
- 稳定性较好
技术点
束缚抵触
对于一部分分库分表中间件或业务本人写的拆分逻辑,并没有思考写入数据主键或者惟一字段值的全局惟一问题,导致做数据汇聚时束缚抵触。
另一类零碎,在业务上就独立,做数据会集时,除了束缚抵触,还存在构造不统一,数据标准不对立的问题。
对以上两种状况,增加额定的字段以打消分表之间的束缚抵触,进行数据荡涤、结构调整,将数据进行规整。自定义代码可能很好的实现这种使命。
DDL 同步
分库分表数据汇聚还存在一个较大的问题是 DDL 同步,对于大部分这类场景, 相似的 DDL 会在源端执行多遍,然而在对端只能执行一遍,并且数据和局部 DDL 有程序依赖问题 — 只有 DDL 在对端执行胜利之后,新的数据能力写入或者执行。
咱们目前倡议不同步 DDL, 依照肯定标准进行源和指标端 DDL 变更,达到不提早且 DDL 不处于中间状态的目标。
操作示例
前置条件:
- CloudCanal 社区版部署, 参见 社区版装置文档
- 筹备好 MySQL 数据库(本例源端 5.7,指标端 8.0)
-
源端 MySQL 上创立 2 个分库(shard_1 和 shard_2), 表构造统一(本例每一个分库只有一张分表)
CREATE TABLE `shard_1`.`my_order` (`id` bigint(19) NOT NULL AUTO_INCREMENT, `gmt_create` datetime NOT NULL, `gmt_modified` datetime NOT NULL, `product_id` bigint(20) NOT NULL, `user_id` bigint(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 CREATE TABLE `shard_2`.`my_order` (`id` bigint(19) NOT NULL AUTO_INCREMENT, `gmt_create` datetime NOT NULL, `gmt_modified` datetime NOT NULL, `product_id` bigint(20) NOT NULL, `user_id` bigint(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8
-
指标 MySQL 上创立 1 个汇聚库(no_shard), 并蕴含 1 张汇聚表
- %(#ea1f1f)[额定多出 region 字段,该字段通过自定义代码固定生成]
- %(#ea1f1f)[源端主键 id 和生成字段 region 组合成联结主键,不便数据汇聚时放弃惟一]
CREATE TABLE `my_order` ( `id` bigint NOT NULL, `region` varchar(64) NOT NULL, `gmt_create` datetime NOT NULL, `gmt_modified` datetime NOT NULL, `product_id` bigint NOT NULL, `user_id` bigint NOT NULL, PRIMARY KEY (`id`,`region`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
开发宽表代码
- 代码工程 cloudcanal-data-process,并找到代码类 MySqlPartitionToMySql1_user_1.java 和 MySqlPartitionToMySql2_user_1.java
- 为了清晰,本案例对于不同的源库,应用不同的自定义代码,实际上两者逻辑统一,只是匹配库表是有所不同。
增加数据源
- 登录 CloudCanal 平台
- 数据源治理 -> 新增数据源
- 将源端和指标端MySQL 别离增加
分库 shard_1 工作创立
- 工作治理 -> 工作创立
- 抉择 源 和 指标 数据源
- 抉择 数据同步 ,并勾选 全量数据初始化, 其余选项默认
- 抉择须要迁徙同步的表, 此处只有抉择待聚合表即可,对端抉择聚合表
-
批改自定义代码,并打包
% pwd /Users/zylicfc/source/product/cloudcanal/cloudcanal-data-process % mvn -Dtest -DfailIfNoTests=false -Dmaven.javadoc.skip=true - Dmaven.compile.fork=true clean package
- 抉择列, 默认全选,%(#ea1f1f)[抉择上传代码包 1]
- 确认创立, 并主动运行
分库 shard_2 工作创立
- 工作治理 -> 工作创立
- 抉择 源 和 指标 数据源
- 抉择 数据同步 ,并勾选 全量数据初始化, 其余选项默认
- 抉择须要迁徙同步的表, 此处只有抉择待聚合表即可,对端抉择聚合表
-
批改自定义代码,并打包
% pwd /Users/zylicfc/source/product/cloudcanal/cloudcanal-data-process % mvn -Dtest -DfailIfNoTests=false -Dmaven.javadoc.skip=true - Dmaven.compile.fork=true clean package
- 抉择列, 默认全选,%(#ea1f1f)[抉择上传代码包 2]
- 确认创立, 并主动运行
分库工作状态
- 两个分库汇聚工作失常运行
校验数据
- 变更 shard_1 数据
- 变更 shard_2 数据
- 查看 no_shard 汇聚库数据
常见问题
是否反对带数字后缀的分表
反对,就是在自定义代码中匹配表名会略微简单些,须要自行批改匹配逻辑。
是否反对异构数据库
反对,自定义代码是 CloudCanal 通用性能,可实现自在的数据变幻。然而对于具体的指标数据源,行为可能会产生一些轻微变动,须要进行肯定的测试和验证。
如果遇到出错或者问题怎么办?
如果会 java 开发,倡议关上工作的 printCustomCodeDebugLog 察看输入的数据是否合乎预期,如果不合乎预期,能够关上工作的 debugMode 参数,对数据转换逻辑进行调试。
如果不会 java 开发, 找 CloudCanal 同学帮助。
总结
本文简略介绍了如何应用 CloudCanal 进行分库分表数据汇聚。各位读者敌人,如果你感觉还不错,请点赞、评论加转发吧。
更多精彩
- 5 分钟搞定 MySQL 到 ClickHouse 宽表构建和同步 -CloudCanal 实战
- 5 分钟搞定 MySQL 到 ElasticSearch 宽表构建和同步 -CloudCanal 实战
- 异地多活根底之数据双向同步进阶篇 -CloudCanal 实战
- 5 分钟搞定 MySQL 到 ClickHouse 实时数据同步进阶篇 -CloudCanal 实战
- 支流关系型数据库到 Kudu 实时数据同步 -CloudCanal 实战
- 5 分钟搞定 MySQL 到 ElasticSearch 迁徙同步 -CloudCanal 实战
- 5 分钟搞定 MySQL 到 MySQL 异构在线数据迁徙同步 -CloudCanal 实战
- MySQL 到 ElasticSearch 实时同步构建数据检索服务的选型与思考
- 构建基于 Kafka 直达的混合云在线数据生态 -cloudcanal 实战
- 5 分钟搞定 MySQL 到 TiDB 的数据同步 – CloudCanal 实战
退出社区
咱们创立了 CloudCanal 微信交换群,在外面,您能够失去最新版本公布信息和资源链接,您能看到其余用户一手评测、应用状况,您更能失去激情的问题解答,当然您还能够给咱们提需要和问题。扫描下方二维码,增加咱们小助手微信 suhuayue001 拉您进群,备注: 加 CloudCanal 群
退出 CloudCanal 粉丝群把握一手音讯和获取更多福利,请增加咱们小助手微信:suhuayue001
CloudCanal- 收费好用的企业级数据同步工具,欢送品鉴。
理解更多产品能够查看官方网站:http://www.clougence.com
CloudCanal 社区:https://www.askcug.com/