Chapter 1 · Practice 4 of 4
Plan backfills explicitly instead of relying on catchup
Why it matters
In Airflow 3, catchup is off by default (catchup_by_default=False): the scheduler creates a run only for the latest interval. Turning catchup on makes the scheduler create a run for every missed interval, including after a DAG has been paused for a while, which can flood workers unexpectedly.
For deliberate reprocessing, use a backfill:
bash
airflow backfill create --dag-id orders_daily \
--from-date 2026-03-01 --to-date 2026-03-31 \
--max-active-runs 3
Backfills are only safe if tasks are idempotent and read their own data window. Before a large backfill, run it for one interval, compare the output with the existing data, and limit concurrency so the warehouse is not overloaded.