首页/数据/数据工程与 ETL 速查/catchup 补跑行为控制

catchup 补跑行为控制

catchup 决定新上线的 DAG 是否补齐 start_date 到当前的所有周期:开启会一次性生成大量历史周期任务,关闭则从当前之后开始。

catchup=True补齐 start_date 以来的每个调度周期
catchup=False跳过历史,只跑当前及之后
适用历史数据无需回刷时关闭;需要补历史时用受控的 backfill

Airflow DAG 参数

Airflow DAG 参数
from datetime import datetime
from airflow import DAG

dag = DAG(
    'daily_orders',
    start_date=datetime(2026, 1, 1),
    schedule='0 2 * * *',
    catchup=False,          # 上线后不补历史
    max_active_runs=1,
)
开启 catchup 且 start_date 很早时会瞬间创建成百上千个 DagRun,要配合 max_active_runs 与并发限制。

易错点

  • 忘了设置 catchup,上线即触发数月历史任务,打满集群
  • 关掉 catchup 后又要补历史时,应使用 backfill 指定区间,而不是改回 catchup 全量重跑

数据来源与参考

  • Apache Airflow 官方文档:Catchup 与 Backfill 说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌