本文为您介绍一键实时同步MaxCompute任务失败场景及恢复解决方法。

常见的实时任务写入失败场景

场景分类相关文档
Binlog无丢失场景及全增量同步任务Binlog无丢失
Binlog有丢失场景及全增量同步任务Binlog有丢失
Merge任务的报错失败场景及全增量同步任务Merge任务的报错失败

Binlog无丢失

  • 出现不支持的DDL导致实时任务失败

    解决方法:

    • 进入数据集成 > 同步任务找到目标任务,单击更多 > 修改配置编辑全增量同步任务,可以通过先减表,提交执行流程,再加表,提交执行流程,触发此表的重新同步,跳过该表不支持的DDL。
    • 实时任务启动时,修改DDL策略,修改该类型的DDL策略为“忽略”或者“告警”,如下图所示:
      说明 这里是临时对实时同步任务的DDL规则修改。全增量同步任务重新执行时,实时同步任务的DDL规则会被覆盖掉。您也可以直接修改全增量同步任务的DDL配置规则。
      策略
  • 出现脏数据导致的实时任务报错
    • 常见的场景有目标列类型和源端数据不兼容,查看实时任务运行日志、查看脏数据的输出内容,请确认是源端数据问题还是目标端问题,如果是目标表结构问题,可能需要重建目标表以恢复实时任务。
    • 重新加载表:需要备份原来的表,然后通过编辑全增量同步任务,先减表再加表(使用已有表)的方式重新加载表,确保字段和源端数据兼容,执行加载表前用已有目标表的方式将任务恢复。
  • Tunnel端问题导致写入MaxCompute报错
    查看实时任务日志,若报错信息为InternalServerErrorException when calling callable. Exception Msg: Read timed out错误提示(例如图中报错),表示Tunnel服务端出现了问题,请联系MaxCompute值班同学排查,问题解决后,重启实时任务。报错信息

Binlog有丢失

Binlog丢失会导致增量无法回补完整,此时需要重新初始化全量数据,并重启增量。有如下几种方式可以恢复全增量同步任务运行:

通过强制重跑功能恢复

  • 适用场景
    • 实时任务失败太久导致Binlog被清理,无法补回增量数据。
    • 由于各种原因导致目标表缺失了新增列。
    • 由于各种原因导致目标表数据出现了缺失或者正确性问题。
  • 功能入口
    1. 数据集成 > 同步任务页面找到目标任务。
    2. 单击操作更多 > 强制重跑强制对源端所有表进行全增量初始化操作,将源端数据重新迁移到目标表中,以快速恢复数据。

      您可以在目标同步任务的操作列单击执行详情,查看任务执行的详细信息。

      重要
      • 对与一键实时同步至MaxCompute任务,执行强制重跑前,需要确认是否可能和正在运行或者即将运行的Merge任务实例产生冲突(同时运行时,如果业务日期相同,分区数据或者表数据可能会相互覆盖)。
        您可以在DataWorks运维中心查看周期实例页面查看该全增量同步任务Merge实例的执行情况,如果Merge任务和强制重跑操作产生冲突,您可以:
        • 暂停强制重跑操作,等待Merge任务执行完成后,再执行强制重跑操作。
        • 冻结即将运行的Merge实例,等待强制重跑成功后,恢复Merge实例。
      • 强制重跑暂不支持分库分表全增量同步任务。
      • 执行完强制重跑后,不建议再执行全增量同步任务加减表等其他操作。等待此次同步链路恢复正常后在做其他操作。如果执行了其他操作,需要重新执行强制重跑,否则上一次强制重跑无效。
      • 强制重跑执行完成后,如果次日数据未产出或者Merge任务没有恢复自动运行时,您需要手动确认并恢复该Merge实例的运行:

通过全量补数据方式恢复

  1. 恢复实时任务。
    进入运维中心 > 实时同步任务页面,找到目标任务,重启实时任务,先恢复增量数据。
  2. 执行全量补数据。
    1. 数据集成 > 同步任务页面找到目标任务。
    2. 单击对应同步任务操作列的全量补数据,配置全量补数据参数。
      1. 选择补数据的业务日期。

        选择前一天的日期作为补数据业务日期。

      2. 选择补数据端表。

        在左侧选择框,选择要执行全量同步的表,如果是恢复整个任务,就选择所有表,单击图标图标,将其添加至右侧。

      3. 单击确定按钮,开始全量补数据操作。
    3. 查看执行详情。
      您可以在目标同步任务的操作列单击执行详情,查看任务执行的详细信息。
      重要
      • 执行全量补数据前,需要确认补数据的业务日期,是否可能和正在运行或者即将运行的Merge任务实例产生冲突(同时运行时,如果业务日期相同,分区数据或者表数据可能会相互覆盖)。
        您可以在DataWorks运维中心查看周期实例页面查看该全增量同步任务Merge实例的执行情况,如果Merge任务和全量补数据操作产生冲突,您可以:
        • 暂停全量补数据操作,等待Merge任务执行完成后,再执行全量补数据操作。
        • 冻结即将运行的Merge实例,等待全量补数据完成后,恢复Merge实例。
      • 全量补数据暂不支持分库分表全增量同步任务。
      • 执行此操作前,请确认注意事项中的说明,并在第二日及时检查执行结果,如果次日数据未产出或者Merge任务恢复自动运行,需要手动确认并恢复该Merge实例的运行。

通过重新创建全增量同步任务恢复

  1. 进入运维中心 > 实时同步任务页面,找到目标任务,停止原有全增量同步任务创建的实时任务的运行。
  2. 在Datastudio中删除该全增量同步任务创建的离线任务节点,包括checkDone节点和Merge节点等,并提交发布。
    离线节点在全增量同步任务创建的工作流中可以找到。离线节点
  3. 使用已有表的方式,重新创建全增量同步任务,并执行改该任务。

恢复部分表的数据

  1. 进入数据集成 > 同步任务找到目标任务,单击更多 > 修改配置编辑全增量同步任务,通过加表的方式恢复相关表的数据同步。
  2. 恢复历史数据。
    • 对于一键整库实时同步至MaxCompute任务,可以参看上文,执行全量补数据将当前全量数据同步至历史分区。不支持按时间范围补历史数据。
    • 对于其他全增量同步任务,您需要手动创建离线同步任务,补回历史数据。

Merge任务的报错失败

失败后的排查与恢复方案,详情请参考:一键MaxCompute Merge任务节点问题排查方案