首页 > 其他分享 >CloudCanal x OceanBase 数据迁移同步优化

CloudCanal x OceanBase 数据迁移同步优化

时间:2023-04-27 11:44:11浏览次数:43  
标签:CloudCanal OceanBase 分区 扫描 数据库 迁移 主键

简述

CloudCanal 去年支持 OceanBase 数据迁移同步能力后,随着使用用户增多以及问题反馈,近期对该能力进行了一轮较大规模的优化。

本篇文章简要介绍这些优化点,以及未来该能力的演进方向。

优化点

大幅提升同步性能

CloudCanal 目前使用 OceanBase LogProxy 做增量数据订阅,使用方式相对简单明了。

@Override
public void notify(LogMessage message) {
    try {
        ParsedEntry entry = msgConvertor.convertMsgToEntry(message);

        if (entry == null) {
            return;
        }

        instance.getEventStore().put(entry);
    } catch (Exception e) {
        String msg = "parse ob msg failed.msg:" + ExceptionUtils.getRootCauseMessage(e);
        log.error(msg, e);
        throw new LogProxyClientException(ErrorCode.E_PARSE, msg);
    }
}

消息解析对性能影响相对小,攒批对端写入方式 影响更大。

攒批方面,我们将变更事件写入内存队列后,按照 个数/容量阈值(increBatchSize)超时时间(fetchFromBrokerTimeoutMs) 刷出,提升批量写入的粒度。

对端写入方式,根据不同数据源,我们采用了 batchmultisql并行upsert 等技术提升写入效率。

统一各类表全量扫描方式

全量数据扫描 是 CloudCanal 全量数据迁移(或数据初始化)重要组成部分,需满足 性能优秀(2KB/record,>= 100k records 扫描速率)、可断点续传可预测进度表兼容性好 的要求。

其中前三者是业务要求,最后一种是尽可能满足前三者的前提下,做到更多表的兼容。

CloudCanal 碰到的"表"包含以下类型

  • 关系型数据库
    • 无/单/多主键
    • 各种类型主键(整型/浮点/日期/二进制等)
    • 差异值主键(有/无符号,null值/空值,超长值)
    • 各种类型分区
    • 差异数据量(1万,100万,1000万,1亿,10亿,100亿)
    • 实体表/视图/临时表
  • 消息中间件
    • 各种命名规范
    • 无/有分区
    • 顺序/非顺序
  • 文档数据库
    • 规范/非规范(schemaless)
    • 无/有行业规范格式(ObjectId)
  • 缓存数据库
  • 搜索引擎

CloudCanal 全量数据扫描主要面向关系型数据库,性能要求断点续传能力进度预测能力都基于主键展开。

此次优化,我们做了如下几方面工作,统一了扫描逻辑,并且让无/单/多主键、各种类型主键、分区表都可断点续传

  • 主键分区作为断点续传位点
  • 扫描语句加入分区指定(如有)元组比较(单/多主键)按元组排序指定分页数等部分
  • 对比位点最大值扫描行数方式判定扫描是否结束

此外,各个数据源可根据自身差异性,可扩展扫描语句最大最小位点值获取逻辑链接自定义(设置超时等)执行语句上下文自定义(设置fetchSize等)

支持全局索引表

全局二级索引(GLOBAL)对分布式数据库有着非常重要的作用,它让原本 多分区数据检索 操作 弱化成单分区检索,加速不同维度点查响应,提升 QPS。

对于 OceanBase 对端写入,CloudCanal 默认采用关系型数据库 INSERT IGNORE/ON DUPLICATE KEY UPDATE 规避主键/唯一键冲突

但是对于带有 GLOBAL 索引的表,OceanBase 不支持 INSERT IGNORE 操作,所以此次优化,我们写入 OceanBase 的 INSERT 操作默认改为 ON DUPLICATE KEY UPDATE (REPLACE)。

异构 DDL 同步转换优化

从异构数据库同步 DDL 到 OceanBase,我们优化成白名单模式

如 MySQL 到 OceanBase DDL 同步,默认支持

  • ALTER TABLE xxx ADD/DROP/MODIFY COLUMN
  • CREATE INDEX
  • RENAME TABLE

优化同时去除了 ALTER TABLE xxx CHANGE COLUMNAFTER/BEFORE 等 OceanBase 现阶段不支持的语句。

此项能力随着 OceanBase 产品能力的进化而不断丰富。

解决时间戳自更新问题

对于类似 gmt_create datetime/timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 时间字段定义,当源端该字段值变化区间小于时间精度(被程序判定未变化),并且写入对端并非采用 upsert 方式(精确字段更新),那么该字段数据将不一致。

CloudCanal 在精确字段更新模式下,默认将时间字段置为更新状态,确保将源端值带到对端,解决不一致的问题。

演进方向

OceanBase 商业级增量组件兼容

OceanBase 商业版 OMS 的数据订阅能力有别于目前社区版的 LogProxy,如 OceanBase 官方逐步扩大其使用面,CloudCanal 将第一时间跟进兼容。

更快的数据校验和订正能力

分布式数据库相对单机数据库,单表数据量大幅度增加(亿级表相当常见),数据校验和订正性能相比数据初始化,更加依赖数据扫描的性能,为此,CloudCanal 将开放 单表分片/分区并行扫描 的能力。

更强的结构迁移和 DDL 同步能力

大表 通用/特殊化分区 是常见操作,目前 CloudCanal 对表分区的结构迁移并未有效支持,这种分区的结构迁移,对于同构数据库相当必要。后续,我们将提供 分区信息的结构迁移

更多的数据源生态支持

以 OceanBase 为源端数据迁移同步,目前支持 MySQLStarRocksOceanBaseKafka 对端,我们希望后续如 RedisElasticSearchDorisHudi 等数据源也能加入到这个目标数据源中。

总结

本文主要介绍了 CloudCanal 在过去一段时间对 OceanBase 数据迁移同步能力的优化,从而是这个能力具备更强的性能更好的兼容性更加稳定的数据迁移同步表现

标签:CloudCanal,OceanBase,分区,扫描,数据库,迁移,主键
From: https://www.cnblogs.com/clougence/p/oceanbase_change_data_capture_optimize_1.html

相关文章

  • 数据在线迁移思考
    背景数据需要从一个库迁移到另外一个库,比如客户新买一个软件,使用的旧服务数据需要迁移到新软件内。或者数据压力较大,需要分库分表,数据需要迁移到新的库方案1双写开启双写可以在服务内增加配置,是否写新库、旧库。迁移期间,开启配置当天的数据同时写入新库和旧库。历史数......
  • gitLab数据备份、恢复和迁移
    自建的Gitlab服务器常常会因为使用时间的增长,其空间容量等硬件需求都需要升级,或者迁移至更高配置的服务器上。备份、迁移、恢复、升级过程如下一、gitlab备份备份前gitlab的项目如图所示 1.1修改仓库存储位置gitlab通过rpm包安装后,默认存储位置在/var/opt/gitlab/git-dat......
  • 数据同步迁移工具
    mongo的迁移使用mongoshake实现mongo的单向迁移。MongoShake是一个以golang语言进行编写的通用的平台型服务,通过读取MongoDB集群的Oplog操作日志,对MongoDB的数据进行复制,后续通过操作日志实现特定需求。日志可以提供很多场景化的应用,为此,我们在设计时就考虑了把MongoShake做成通......
  • 如何解决通信架构迁移时的消息格式不一致问题
    有时候,当进行通信架构迁移时,会遇到消息格式不一致的兼容性问题,可采用定义内嵌引用的方式来解决,如下示例:1#include<iostream>23classA{45inta=1;6int&b;78structRequest{9intc;10}request;1112public:13A():......
  • es-dump数据迁移
    使用elasticdump工具迁移数据1.下载npm打开网址:http://nodejs.cn/download/或者wgethttps://npm.taobao.org/mirrors/node/v16.19.1/node-v16.19.1-linux-x64.tar.xztar-xf node-v16.19.1-linux-x64.tar.xz -C /usr/local/cd /usr/local/node-v16.19.1-linux-x642......
  • kvm冷热状态迁移
    kvm冷热状态迁移 精选 原创wx5b9c94b17c62a2020-03-2422:40:36博主文章分类:kvm文章标签kvm冷热状态迁移文章分类虚拟化云计算阅读数4847KVM迁移静态迁移(冷迁移)对于静态迁移,你可以在宿主机上保存一个完成的客户机镜像快照,然后在宿主机中关闭或者暂停该客户机,然后将客......
  • sqlplus工具迁移数据经验
        需要紧急把测试服务器数据迁移到pc机用于演示,但pc机无网络又没有客户端工具,只能使用sqlplus,且导出得文件又是sql文件,失去工具支持导入共过程遇到很多问题,如乱码问题,sql文件中特殊字符,日志存放和查看,导出文件不能写入,安装过程目录写入权限等大小问题。希望通过这篇博客把......
  • ceph-san跨存储迁移指导文档
    CEPH-SAN存储后端迁移指导文档确认需要进行虚拟机的UUID和宿主机节点当前宿主机节点为FZHZ4-TSTACK-COM05确认该宿主机节点是否对接FCSAN对接SAN后需要满足以下条件才可进行跨存储迁移1).HBA卡要插线,确认有端口速率2).在SAN存储上添加映射关系3).SAN交换机zone要划分正取可......
  • 无感平滑迁移:海量高并发数据库如何进行国产化改造?
    首先,讲一下数据库国产化的大背景。一、数据库国产化的背景国家战略方面的,随着外部形势的日益复杂,核心技术急需实现自主可控、安全可靠、高效开放;另一个要求是业务方面的,当业务高速发展后各种问题会接踵而至,单机数据库达到瓶颈,业务拆分、垂直拆分、水平拆分等,都需要花费大量的研发时......
  • 热迁移虚拟机报rpc超时
    问题背景:南网生产V区,热迁移虚拟机偶发性失败。问题现象:热迁移虚拟机有时候能成功,有时候直接报错。影响范围:影响热迁移功能问题排查过程:现场反馈源节点7需要做停机整改,所以需要将源节点7上的虚拟机热迁移走。现在迁移成功两台,然后再迁移就报错了。看到nova-compute报错第一时间想到......