如何防止追赶DAG?

时间:2018-07-22 08:22:40

标签: airflow

我有以下DAG:

default_args = {
    'owner': 'Airflow',
    'depends_on_past': False,
    'start_date': datetime(2018, 07, 19, 11,0,0),
    'email': ['me@me.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 5,
    'retry_delay': timedelta(minutes=2),
    'catchup' : False,
    'depends_on_past' : False,
}


with DAG('some_dag', schedule_interval=timedelta(minutes=30), max_active_runs=1, default_args=default_args) as dag:

此dag每30分钟运行一次。它重写表中的数据(全部删除并写入)。因此,如果Airflow中断了2天,那么在这段时间内运行所有丢失的dag运行就没有意义了。

但是,以上定义不起作用。气流停止两天后,它仍然尝试运行所有丢失的任务。

我该如何解决?

2 个答案:

答案 0 :(得分:4)

根据文档:https://airflow.apache.org/scheduler.html#backfill-and-catchup

  • dag.catchup = False添加到DAG参数。
  • catchup_by_default = False添加到airflow.cfg

根据您的用例,可以设置一个catchup_by_default = False的好习惯,然后仅在给定的DAG需要进行补充时才使用dag.catchup = True

答案 1 :(得分:1)

好。我解决了 显然'catchup' : False上的default_args没有意义。它什么也没做。 我将代码更改为

default_args = {
    'owner': 'Airflow',
    'depends_on_past': False,
    'start_date': datetime(2018, 07, 19, 11,0,0),
    'email': ['me@me.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 5,
    'retry_delay': timedelta(minutes=2),
    'depends_on_past' : False,
}


with DAG('some_dag', catchup=False, schedule_interval=timedelta(minutes=30), max_active_runs=1, default_args=default_args) as dag:

现在可以了。