1. 概述
1.1 版本
FineDataLink 版本 | 功能变动 |
---|---|
4.0.5 | - |
4.0.27 | 脏数据处理优化,支持对单表和多表生成的脏数据进行忽略、重试或者重新同步 |
4.1.2 |
|
4.2.1.1 | 脏数据配置影响范围由任务级别调整到表级别 |
1.2 应用场景
管道任务中的表产生脏数据时,用户希望能通过界面快速定位分析脏数据,并对相关数据进行处理以保证管道任务正常运行。
1.3 功能简介
FDL 提供三种处理脏数据的策略:忽略脏数据、重试脏数据、重新同步。如下图所示:
2. 查看具体脏数据
1)点击具体管道任务,可在「管理活动」Tab下查看该任务产生的脏数据条数。如下图所示:
2)用户点击「脏数据」按钮,可将产生脏数据的表筛选出来。如下图所示:
3)用户点击表右侧的脏数据条数,可查看具体脏数据信息。如下图所示:
3. 处理脏数据
注:脏数据明细展示和处理针对分组表的说明:暂时不允许对分组表进行整体的处理操作,所有处理操作在分组内的各表中进行。
3.1 用户需知
3.1.1 脏数据事件记录逻辑
若在t1时间点,主键为A的数据产生了脏数据,t1以后再进行主键为A的写入时,如果写入成功,则清除主键A历史脏数据,如果写入失败,则仅保留主键A的最新一条脏数据。
若在t1时间点,主键为A的数据被更新为主键为B,则管道应拆解为两个事件进行顺序处理至目标端:Delete A,Insert B。
3.1.2 输出端为批量装载模式的制约
当输出端为批量装载模式时,此时一般会使用一个包括很多数据条数的大批次进行一次性提交数据到目标端,这类数据源可能无法识别到过程中哪些数据出现了脏数据,目前已有的支持批量装载的目标端具体分析如下:
1)GaussDB 200 支持两种写入模式,分别为copy和并行装载:
copy模式:
在全量阶段,当单批次提交失败后,会将这个批次的数据改为调用JDBC接口进行写入(目前单个批次1024条),JDBC写入时能获取到具体错误数据,进而实现脏数据明细展示,但是JDBC方式性能不佳;
在增量阶段,当单批次提交失败后,会将整个批次的数据记为脏数据(目前单个批次最大是5M,约合一般1万行内,具体行数与单条数据大小有关);
并行装载(load):
并行装载时,也是将单次任务内所有需要的数据进行一次性提交,但是并行装载提供接口可以查询具体错误数据,进而FineDataLink 也可以实现脏数据明细查询。
2)HIVE 的HDFS写入方式:
直接一次性写入到HDFS文件、完全无法获取明细错误数据,不支持脏数据管理;
3.2 处理单条/多条脏数据步骤说明
处理单条脏数据:
若需要对单条脏数据进行处理,则直接在选择指定数据表的脏数据,然后进行重试或者忽略操作即可。如下图所示:
脏数据批量处理:
若需要对当前任务中全量脏数据或者是指定单表的脏数据进行批量处理,则选择指定的来源库数据表,可勾选任务中的单表或者多表,进行脏数据的忽略、重试或者重新同步。如下图所示:
3.3 三种处理策略说明
1)忽略脏数据、重试脏数据、重新同步含义说明如下表所示:
处理方式 | 说明 |
---|---|
忽略脏数据 | 对单表和指定多表,忽略功能会将缓存的脏数据进行删除,且删除后不可找回 同时这部分数据的行数从日志统计的脏数据行数去掉 |
重试脏数据 | 对单表和指定多表,重试功能会将缓存的脏数据进行再次提交,并更新数据量统计 |
重新同步 | 1)支持对单表和整个管道任务进行重新全量同步,会将目标端表清空并重新执行全量同步、在全量同步结束后转入增量同步 2)在任务被开启重新全量同步后,日志统计信息会重置(输入行、输出行) 注:若开启逻辑删除标识时,重新同步对目标表清表重写,重写采用insert逻辑,出现提示“任务运行期间产生的逻辑删除数据将会被清空,请确认” |
2)忽略脏数据、重试脏数据、重新同步三个按钮出现的场景如下表所示:
注1:当数据源是kafka ,不支持重新同步,且过期的脏数据若想重试,仅能通过全表重跑或手动插入脏数据后在管道处忽略脏数据。
注2:若任务为暂停或者中止状态,重新同步后,需要在下次启动时才会真正执行重新同步的逻辑。
处理策略 | 出现场景 |
---|---|
忽略脏数据 | 1)表状态为增量同步中&表存在脏数据 2)表状态为中止&表存在脏数据 |
重试脏数据 | 1)表状态为增量同步中&表存在脏数据&错误类型支持重试 2)表状态为中止&表存在脏数据&错误类型支持重试 |
重新同步 | 1)表状态为增量同步中&管道任务状态为运行中 2)表状态为中止&管道任务状态为运行中 |
若用户需要处理存量同步阶段产生的脏数据,可以导出明细数据,然后手动调整或者插入,如下图所示: