Airflow中最新运营商和追赶者之间的差异



正如标题所示,希望了解dag定义中的catchup=False和最新的only运算符之间的区别。

https://airflow.apache.org/docs/stable/scheduler.htmlhttps://airflow.apache.org/docs/stable/_modules/airflow/operators/latest_only_operator.html

好吧,我想说,它们是完全不同的概念,它们可以独立使用。的确,它们都可以用来防止回填,但如果这是您唯一关心的问题,那么只需使用catchup=False。引用Airflow开发人员的回复,事实上,很明显,好的做法是使用

作为LatestOnlyOperator的作者,目标只是权宜之计,直到catchup=假着陆。

但他接着说LatestOnlyOperator应该被弃用。我不同意(作为catchup=FalseLatestOnlyOperator的用户(,我会尽力解释。我对这两个概念的直觉是:


追赶=真

在DAG定义中(即,当您指定其default_args时(,您可以将标志catchup设置为True。如果将此标志设置为True,并将DAG设置为ON,则调度程序将为从start_date到"当前"的每个调度间隔创建DAG运行,并按顺序执行。引用文件:

如果dag.catchup的值改为True,则调度程序将为2015-12-01和2016-01-02之间的每个完成的间隔创建一个DAG Run(但还没有为2016-01-02创建一个,因为该间隔尚未完成(,并且调度程序将依序执行它们。


LatestOnlyOperator

CCD_ 12是CCD_。如果DAG运行不在最新计划间隔内(即"最后一次运行"(,则使用此操作员执行的任务将不会运行(即将被跳过,也将跳过下游任务(。同时引用LatestOnlyOperator文档字符串:

"""
Allows a workflow to skip tasks that are not running during the most
recent schedule interval.
If the task is run outside of the latest schedule interval, all
directly downstream tasks will be skipped.
Note that downstream tasks are never skipped if the given DAG_Run is
marked as externally triggered.
"""

结论

您可以使用catchup=True定义计划的DAG,并使用LatestOnlyOperator确保在追赶运行期间不会执行某些任务。此外,如果您想重新运行一些过去的DAG运行(例如,通过在UI中清除它们(,但您有一些任务(如发送的通知(需要在重新运行期间跳过,则可以使用LatestOnlyOperator

最新更新