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

时间:2018-09-05 05:05:03

标签: airflow airflow-scheduler

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

此处是重现此问题的方法。我总是从运行airflow resetdb开始。一旦我取消暂停,任务就开始回填。

这是dag的设置。我只是在使用tutorial example

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)

3 个答案:

答案 0 :(得分:2)

就像{d3b}中提到的@dlamblin一样,Airflow也会在最近的有效间隔内创建一个DagRun。 catchup=False将指示调度程序仅为DAG间隔系列的最新实例创建DAG运行。

尽管将timedelta的{​​{1}}而不是CRON表达式或CRON预设使用docs。 Airflow Master中的BUG已修复此问题。我们将通过此修复程序发布Airflow 1.10.11。

答案 1 :(得分:1)

要清楚的是,如果您启用了当现在时间为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中为什么会出现这种情况,但是documented catchup=False意味着要创建一个最近有效期的单次运行。

如果dagrun运行日期进一步使您感到困惑,请记住运行日期是execution_date,它是间隔时间段的开始。该间隔的数据仅在间隔周期结束时才完全可用,但是气流被设计为在周期开始时通过。

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

如果在22日或之后的日期获得了比21日更早的运行日期,或计划的多次运行,则catchup=False是无效的。但是在v1.10或v1-10-stable分支中没有其他报告。

答案 2 :(得分:0)

我知道这个线程有点旧。但是,在catch_up_default = False中设置airflow.cfg确实阻止了airflow替我回填。 (我的Airflow版本是1.10.12)

我很遗憾默认情况下未将此配置设置为False。这个事实以及dag在schedule_interval之后开始start_date的事实,是困扰Airflow初学者的两个最令人困惑的事情。

我第一次使用Airflow时,我浪费了整个下午的时间,试图弄清为什么计划每5分钟运行一次的测试任务会快速连续地运行(例如每5-6秒运行一次)。我花了一段时间才意识到它在起作用backfill