Skip to main content

断点续传介绍

断点续传是为了在离线同步的时候,针对长时间同步任务如超过1天,如果在同步过程中由于某些原因导致任务失败,从头再来的话成本非常大,因此需要一个断点续传的功能从任务失败的地方继续。

原理

  • 基于flink的checkpoint,在checkpoint的时候 会存储source端最后一条数据的某个字段值,sink端插件执行事务提交。
  • 在任务失败,后续通过checkpoint重新运行时,source端在生成select语句的时候将state里的值作为条件拼接进行数据的过滤,达到从上次失败位点进行恢复

image

jdbcInputFormat在拼接读取sql时,如果从checkpoint恢复的state不为空且restoreColumn不为空,则此时会将checkpoint里的state作为起点开始读取数据

适用场景

通过上述原理我们可知道 source端必须是RDB类型插件,因为是通过select语句拼接where条件进行数据过滤达到断点续传的,同时断点续传需要指定一个字段作为过滤条件,且此字段要求是递增的

  • 任务需要开启checkpoint
  • reader为RDB的插件均支持且writer支持事务的插件(如 rdb filesystem等),如果下游是幂等性则writer插件也不需要支持事务
  • 作为断点续传的字段在源表里的数据是递增的,因为过滤条件是 >

参数配置

开启restore需要在脚本的restore里配置相关参数

参数含义类型
isResore是否开启断点续传,true代表开启断点续传,默认不开启boolean
restoreColumnName断点续传字段string
restoreColumnIndex断点续传字段在reader里的column的位置int

示例

image