4.1.x管道任务升级前排查

  • 文档创建者:Roxy
  • 历史版本:1
  • 1. 概述

    当前为 4.1.5.5、4.1.6.1、4.1.6.2 版本且使用管道的用户若需升级,请联系技术支持排查管道遗留数据

    原因:4.1.5.5新加类,升级后反序列化会失败,以下场景需要做额外处理。

    2. 有脏数据

    进入运维中心>管道任务>任务管理处筛选有脏数据的任务,若存在脏数据,即要提前做好处理。


    原因:29版本定时支持脏数据配置任务影响了管道的脏数据记录,30做的处理仅能兼容29之前的版本,29版本的脏数据反序列化失败,无法兼容。

    现象:29版本管道产生的脏数据,升级到30版本后无法导出及重试。

    处理步骤:

    1)暂停管道任务

    2)使用定时任务进行脏数据处理,任务主要流程及节点解释:

    查询脏数据

    脏数据存于finedb中的fine_dp_pipeline_dirty表中,根据task_table_id进行过滤选表。task_table_id可以于管道任务的运行监控处获取,F12,然后点击查看脏数据详情,此时请求中的sourceTableId即为对应task_table_id

    解析出所有主键值

    JSON路径填写[0]即为获取该数组的第一个值,如果有多个主键,则需要添加多个字段,取得所有主键字段

    参数输出

    该步骤需要输出所有的主键字段传给下游的循环容器

    循环容器-数据同步

    该节点作用为源表使用where语句过滤出主键为参数值的 源表值,同步至目标表中,进行更新/插入

    -----

    以上处理的是after不为空的时候,该场景可以覆盖插入和更新, 还需要覆盖源表删除的场景(before为空,after不为空,对应插入;before和after同时不为空,对应更新;before不为空,after为空,对应删除)

    和上述步骤不同的是:

    解析获取after主键数组

    选择after节点和before,并且勾选「解析后保留上游输出节点」

    过滤出after为空数据

    获取after主键数组算子后接数据过滤,过滤出after的解析值为空的值

    解析获取before主键数组

    过滤算子后再接入解析算子,解析出before中的每个主键值,并输出为参数

    循环容器内数据比对

    因为有删除记录不一定最终结果就为删除,可能后续还有删除操作。因此为了数据的准确性,使用数据比对,过滤出来源和去向表中主键和before的主键值一致的值,进行数据比对,再写入目标表

    ----

    处理完成后,管道脏数据点击忽略,然后启动任务即可。如果客户不需要重试脏数据,就不需要进行以上操作,直接忽略即可

    3. 有待同步数

    查询任务是否存在待同步数:

    暂停任务(任务运维处可以批量暂停/启动),查询finedb:SELECT task_id,table_full_name,to_sync_record_count FROM `finedb`.`fine_dp_pipeline_execute` WHERE task_id = '6f52de99-aa62-4c65-9d3a-0c4b5903d8d0'

    替换库名和task_id(任务ID,可通过F12获得),即可查看查找的任务是否存在待同步数,或者前端查看

    待同步数,正常换jar升级即可,升级后手动起一下任务,不需要做下面的操作

    存在待同步数,有以下两个方案解决:

    方案一:使用新任务(仅增量/全量+增量)    //若使用全量+增量则不需要做下面的操作 ,换jar后新建任务即可

    换jar前操作:

    1.获取有待同步数任务的writerMessageTime以及源端断点位置

    writerMessageTime获取方法:F12,进入对应任务管理活动页面,转换成时间为 「2024-3-22 14:33:41

    源端断点对应时间点获取方法:

    select * FROM `8421_finedb`.`fine_dp_pipeline_savepoint` where task_id = '6f52de99-aa62-4c65-9d3a-0c4b5903d8d0'

    获取到的type为对应源端(非TARGET_KAFKA记录)记录的value值,如下面是oracle对应type为SOURCE_LOGMINER的value值

    拿到value值中的scn,去源库中通过scn去查对应时间戳:

    SELECT SCN_TO_TIMESTAMP(319055004) AS timestamp FROM dual;   预览出来的值为「2024-03-22 14:33:41

    2、将writerMessageTime时间戳和scn找到的断点时间戳比对,选择较早的一个记住这个时间戳A

    换jar升级...

    换jar成功后:

    1、复制原任务,修改同步类型为「仅增量」

    2、选择仅增量同步起点为「自定义时间」,时间选择为「时间戳A-10s」,如上述例子,则选择「2024-03-22 14:33:31

    !!这个减去的时间是机动调整的,如果原任务待同步数量多,且writerMessageTime也没追上来,就多减去一些时间(如1小时),可以结合前端查看有待同步的表的读取写入延时,也可以估算大约要提前多久

    保存并启动任务


    方案二:使用原任务(下下下选,需要修改finedb配置等,存在待同步消不掉的风险)

     方案暂不公开,实在不愿意新建任务的客户可以和chloe沟通下这个方案




    附件列表


    主题: 数据开发-定时任务
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!