如何阻止DAG回填?catchup_by_default=False 和 catchup=False 似乎不起作用并且 Airflow Scheduler 无法回填

Sam*_*Sam 5 airflow airflow-scheduler

airflow.cfg 中的设置 catchup_by_default=False 似乎不起作用。另外,将 catchup=False 添加到 DAG 也不起作用。

以下是重现该问题的方法。我总是从跑步开始airflow resetdb。一旦我取消暂停 dag,任务就会开始回填。

这是 dag 的设置。我只是使用教程示例

default_args = {
    "owner": "airflow",
    "depends_on_past": False,
    "start_date": datetime(2018, 9, 16),
    "email": ["airflow@airflow.com"],
    "email_on_failure": False,
    "email_on_retry": False,
    "retries": 1,
    "retry_delay": timedelta(minutes=5),
}

dag = DAG("tutorial", default_args=default_args, schedule_interval=timedelta(1), catchup=False)
Run Code Online (Sandbox Code Playgroud)

dla*_*lin 2

需要明确的是,如果您在现在时间为 2018-10-22T9:00:00.000EDT(也就是 2018-10-22T13:00:00.000Z)时启用了指定的 DAG,它将在某个时间启动2018-10-22T13:00:00.000Z 之后,运行日期标记为 2018-10-21T00:00:00.000Z。

这不是从开始日期回填,而是在没有任何先前运行的情况下,它确实“赶上了”最近完成的有效期间;我不确定为什么 Airflow 中会出现这种情况一段时间,但有记录表明catchup=False意味着创建最近有效周期的单次运行。

如果 dagrun 运行日期让您更加困惑,请记住运行日期是execution_date间隔期的开始日期。该间隔的数据仅在间隔周期结束时完全可用,但 Airflow 设计为在该周期开始时通过。

那么下一次运行将在 2018-10-23T00:00:00.000Z 之后的某个时间开始execution_date,设置为 2018-10-22T00:00:00.000Z。

如果您在 22 日或之后收到早于 21 日的任何运行日期,或者安排了多次运行,则“是”catchup=False不起作用。但没有其他报告表明 v1.10 或 v1-10-stable 分支存在这种情况。

  • 我明白你的意思,并且我理解它如何帮助完全用 Airflow 编写的 ETL 流程。我的问题是我们如何使用 Airflow 作为纯粹的调度程序,仅在该调度出现时才运行作业。例如,如果我们有一个在 UTC 上午 8 点运行的作业,如果 DAG 在当时关闭并在 UTC 上午 8:15 打开,则该作业不应运行。目前,即使使用“LatestOnlyOperator”,我注意到它也会在“start_date + some_schedule_period”内运行作业。有没有办法解决这个问题/Airflow_feature? (2认同)