《企业级云原生白皮书项目实战》——第五章 大数据——5.2 云原生大数据计算服务 MaxCompute——5.2.3 数据上云(1) https://developer.aliyun.com/article/1228555?groupCode=supportservice
5.2.3.1.2 全增量实时一键数据同步MaxCompute方案
此处以MySQL业务数据库为例,假设有大量的数据存储在数据库系统里,需要将数据库中的全量及增量数据同步到MaxCompute中进行数仓分析,数据集成传统方式是通过DataX进行全量同步或者依赖数据库表中有modify_time这种字段进行增量同步。但实际的生产场景中,数据库表里并不一定存在modify_time这种字段,传统的基于jdbc抽取的方式则没办法进行增量同步。
该场景主要抽象为三个核心需求点:
1.全量数据初始化;
2.增量数据实时写入;
3.增量数据和全量数据定时做合并写入新的全量表分区。
名词解释
•Base表
MySQL中的数据库表对应的MaxCompute中的表
•Log表
一对源、目的数据源(即对应一个数据同步解决方案),会创建一个log表,命名规则为:__log。如源端数据源为:rds_test、目标数据源为:odps_fifirst,则Log表的表名为:rds_test_odps_-fifirst_log。
一般来说,一个MySQL数据源即对应一个数据库DB,则这里可以理解为Log表和DB是一一对应的。该MySQL DB下的所有表的变化情况,都将记录在这张MaxCompute1Log表中,进一步根据解决方案所设置的Merge周期,定期由Merge任务,将Log表的增量内容合并至Base表。
DB 内的所有表的增量数据,每一行数据所有数据列被当做一个字段整体(_data_-columns_)并附带有相关该行记录的元数据信息,Log表定义如下:
解决方案原理阐释
为实现上述的三个核心需求,MySQL同步至MaxCompute全增量Merge分为3个阶段:
1.任务配置当天,执行全量数据初始化的离线同步任务。
2.任务配置当天,待全量数据初始化完成后,启动实时同步任务,将增量数据实时同步至MaxCompute Log表。
3.任务配置第二天,Merge任务将Base表全量数据与实时同步任务的增量数据进行Merge,最后将结果写入Base表。默认Merge周期为1天。
需要特别留意,由于目前全增量Merge周期为一天,Base表实际只能查到T-1的全增量完整数据。如果希望提高增全量合并的时效性,例如从一天合并一次改为一小时合并一次,需要在“一键实时同步至MaxCompute”业务流程的第5步(目前该能力灰度中,并非所有用户均可见),“设置表粒度同步规则”中,调整“Base表Merge设置”。截图参考如下:
《企业级云原生白皮书项目实战》——第五章 大数据——5.2 云原生大数据计算服务 MaxCompute——5.2.3 数据上云(3) https://developer.aliyun.com/article/1228551?groupCode=supportservice