定时与补数是什么
Apache DolphinScheduler 里,工作流定义需要先上线才能被调度。定时(Schedule)由 cron 表达式加生效起止日期组成,决定工作流在什么时刻生成实例;补数(Backfill)则按日期区间批量生成实例,用于历史回填与故障重跑,可以选择串行或并行执行,并配置是否检查依赖节点是否满足。补数的关键差别在于业务日期:每个实例拿到的是所补日期的参数,因此脚本必须用变量而不是写死的日期。
基本信息
| 版本背景 | DolphinScheduler 2.x 与 3.x 的定时、补数入口与参数名有差异,以所部署版本界面为准 |
|---|---|
| 定时 | Cron 表达式加生效起止日期,上线后生效 |
| 补数范围 | 按开始与结束日期批量生成实例 |
| 执行方式 | 串行或并行,可设置并行度 |
| 依赖检查 | 可配置是否检查依赖节点是否满足(对应参数名随版本变化) |
典型使用场景
- 新工作流上线后补跑近 30 天历史数据
- 上游数据修正后重跑受影响日期的下游任务
- 故障恢复:任务失败期间的时间段一次性补齐
- 临时调整产出时间:修改定时后只对未跑过的日期生效
- 分区表重建:按日期区间逐天重算并覆盖写入
定时与补数要点
定时与补数要点
定时示例:0 0 2 * * ? 每天 02:00 执行
补数路径:工作流定义 → 补数 → 选日期区间 → 设置并行度 → 运行
要点一:脚本用参数(如全局参数或内置日期变量)取业务日期
要点二:补数前确认写入是覆盖(INSERT OVERWRITE)还是追加
要点三:并行度按源库与目标集群承受能力设置,避免同时压上游
要点四:补数完成后核对分区行数与依赖任务是否需要跟着重跑定时与补数对照
| 项 | 定时 | 补数 |
|---|---|---|
| 触发方式 | 按 cron 自动生成实例 | 手动指定日期区间 |
| 业务日期 | 取计划时间对应日期 | 取所补区间的每一天 |
| 执行范围 | 未来生效期内 | 指定的历史区间 |
| 典型用途 | 日常调度 | 回填与重跑 |
| 风险 | 改定时后旧定时会残留 | 不幂等任务造成重复数据 |
补数并行度开太大同时压向源库,容易影响上游生产;跨天补数前必须先确认任务是否幂等(覆盖写入还是追加写入)。
工作流更新后需要重新上线,旧的定时可能仍绑在旧版本上;调整流程结构后要回定时列表确认生效版本与生效时间。
补数时业务日期随所选日期变化,脚本里写死日期的任务补出来的是同一天的数据,看上去任务全绿但数据没有变化。