1.概述编辑
1.1 版本说明
FineDataLink 版本 | 功能变动 |
---|---|
4.0.5 | - |
4.0.7 | 管道任务列表交界面优化 |
4.0.14 | 支持逻辑删除和显示数据存储入库时间戳 |
1.2 应用场景
企业在在构建数仓和中间库时,由于业务数据量级较大,如果使用数据同步批量定时同步数据很难做到高性能的增量同步,若使用清空目标表再写入数据的方式时,还会面临目标表一段时间不可用、抽取耗时长等问题。
因此希望能在数据库数据量大或表结构规范的情况下,实现高性能的「实时数据同步」。
1.3 功能说明
FineDataLink 支持对数据源进行单表、多表、整库数据的实时全量和增量同步,可以根据数据源适配情况,配置实时同步任务。
1.4 使用限制
支持的数据源详情参见:数据管道支持的数据源
2. 前提条件编辑
数据源环境已准备完成:基于需要设置数据管道任务的数据源,授予数据源配置的账号在数据库进行相应操作的权限。详情请参见:数据源环境准备。
已完成数据源配置。需要在使用数据管道进行实时同步任务配置前,配置好需要同步的源端和目标端数据库,以便在同步任务配置过程中,通过选择数据源名称来控制同步任务,详情参见:配置数据连接
注:配置数据源时,某些数据库需要选择数据库模式,此时选择的数据库模式与数据管道任务中使用的数据库模式一致,在创建管道任务前请进行确认。
3. 操作步骤编辑
示例以 MySQL 数据同步至 SQL server 数据库为例。
将 demo 数据库中的「S订单」、「hd_xiaoshou」、「hn_xiaoshou」、「hb_xiaoshou」数据表实时同步至 system 数据库中。
3.1 配置传输队列
配置传输队列,其实就是配置暂存来源库数据,方便目标库写入数据的「数据管道」,目前是通过 Kafka 实现的。
详情参见:配置传输队列
3.2 选择数据来源
首先选择需要数据同步的来源数据。
点击「数据管道>新建任务」,进入任务设置界面,选择来源数据库以及需要进行数据同步的数据表,当然也可以选择多个数据库下的数据表,默认读取方式为 Binlog,默认先对所有存量数据同步,然后持续同步新增变化,如下图所示:
注1:单个任务限制最多选取 5000 张表,达到限制时不允许新增选择。
注2:读取对象只支持选择数据库表,不支持选择视图。
注3:当前只支持数据变化(DML)同步,不考虑支持结构变化(DDL)同步。
将已经存在的「S订单」、「hd_xiaoshou」、「hn_xiaoshou」、「hb_xiaoshou」数据表选到「要同步的表」中,如下图所示:
3.3 选择数据去向
然后选定需要同步至的目标数据库位置。
点击下一步进入「选择去向」界面,选定目标数据库,如下图所示:
目标数据表数据结构和来源表一致:首次数据同步会清空目标数据表数据,然后全量同步数据,此后增量同步。
目标数据库没有和来源表一样的数据表,则直接在目标数据库新建数据表。
注::Greenplum(并行装载)作为目标端时,需要数据库用户具有CREATE SCHEMA和CREATE TABLE权限。数据装载时,将新建名为fdl_temp的模式用于存放临时表。
注:不支持DDL同步,若目标数据表数据结构和来源表不一致,写入目标数据库中的策略如下所示:
来源端发生的表结构变化 | 目标数据库同步数据策略 |
---|---|
表字段删除 | 删除字段的动作不会同步,目的地该字段传空值 |
表新增字段 | 新增字段的动作不会同步 |
删除正在同步的表 | 记录一条错误,继续同步其他表 |
表字段改名 | 识别为表字段删除,同表字段删除的逻辑 |
接下来设置「源端删除数据」为「目标端执行逻辑删除」,然后勾选「同步时标记时间戳」,如下图所示:
注1:GaussDB数据及PostgreSQL9.4以下(含9.4)版本数据,不支持「目标端执行逻辑删除」。
注2:勾选「目标端执行逻辑删除」和「同步时标记时间戳」后默认作用在该管道任务的所有数据表,不支持仅设置管道任务中的一张表。
如果选择「目标端执行物理删除」,则来源表删除的字段同步至目标表中会直接删除;
如果选择「目标端执行逻辑删除」,则所有同步目标表将新增一个名称为_fdl_marked_deleted 的布尔型字段(字段默认为false),用于记录数据删除状态。
然后勾选「同步时标记时间戳」,所有目标表将新增一个名称为_fdl_update_timestamp 的长整型字段,以毫秒级时间戳的形式记录数据在数据库中实际新增和更新的时间(数据库所在时间)。
如下图所示:
如果选择「目标端执行逻辑删除」,来源数据表删除了一条数据,此时同步至目标表,目标表不进行物理删除,而是将_fdl_marked_deleted 字段更新为 true 。
注:如果后续有和目标表表中已存在主键相同的数据重新写入,不插入新数据,而是更新该数据,并将之前已经标记为删除的数据标记为未删除。
如果勾选了「同步时标记时间戳」,来源表中的数据进行了新增和更新,则该字段会写入「数据入库时间戳」和「数据更新时间戳」。
例如来源数据库数据表「S订单」中删除了一条订单ID 为10257的数据,如下图所示:
在目标数据表中,订单ID 为10257的数据不会被删除,而是将对应「_fdl_marked_deleted」字段修改为 true,同时「_fdl_update_timestamp」字段时间戳修改为删除字段的时间戳,如下图所示:
注:「目标端执行逻辑删除」、「同步时标记时间戳」功能仅在管道任务新建和暂存状态时可进行配置,运行中、暂停状态的任务不允许调整配置。
3.4 设置表字段映射
点击下一步进入字段映射设置界面。
同时可以调整目标数据库数据表的字段类型和字段顺序,并选择数据是否可以为空,如下图所示:
3.5 设置管道控制
点击下一步进行数据管道的任务设置。
数据同步允许一定的容错,比如字段类型、长度不匹配、主键冲突等等问题,可以设置产生的脏数据上限,达到上限则自动终止管道任务。
注:限制最多10w行,且重启任务后,会重置阈值统计。
同时设置当任务异常时的通知,如下图所示:
3.6 保存任务
点击「保存」,即可保存任务,如下图所示:
只有在任务编辑的最后一步才可「保存」,此时在「任务列表」中即可看到设置完成的管道任务,如下图所示:
每一步都可「暂存」,暂存后在暂存列表即可显示暂存的任务,如下图所示:
3.7 执行任务
在任务列表界面,可以启动管道任务或者进入编辑界面进行任务修改设置,如下图所示:
此时启动任务,进入管道任务中,即可看到任务执行情况,如下图所示:
3.8 效果查看
此时即可在目标数据库 已经实现了数据表的实时同步,如下图所示:
4. 后续步骤编辑
任务配置完成后,可以在「任务运维>管道任务」中管理该任务,详情请参见:管道任务运维