为什么每天的气流会跳过一天?

dor*_*mon 1 airflow

我有一个新创建的每日 dag,昨天(1 月 25 日)已设置它,一旦通过气流加载,我可以看到它运行一次(scheduled_2021-0124T00:00:00+00:00),然后我手动触发一次只是为了看看它是否有效并且确实有效(manual_2021-01-25)。

现在时间是 UTC 1 月 26 日 08:24。但我没有看到01-25有任何运行。我已经使用airflow dags next-execution并发现 Airflow 计划直接执行 01-26 的 dag,可能是在 01-27 00:00 UTC。所以它将完全跳过 01-25。

我想知道为什么会有这种行为?这背后有什么原因吗?

在此输入图像描述

tre*_*jas 5

这是 Airflow 中最难掌握的概念。明白这一点后,系统的其余部分就相当简单了。但这个设计规范是残酷的,我见过经验丰富的工程师跪下来,愤怒地哭泣。

正如 Airflow 文档中另一位发帖者提到的,Airflow 在周期结束时运行您的工作。对于我来说,对于具有每日计划的 DAG 来说,这是最容易可视化的。DAG 运行日期为 01/01/2021,开始时间为 00:01 AM,直到 01/02/2021 00:01 AM 才会执行。

令人困惑的部分是为什么!?当你停下来思考为什么要编写 Airflow 时,它就开始有意义了。此执行模式可确保当您的编排管道运行以对该数据执行操作时,运行日期 01/01/2021 的数据完整且准备就绪。将其视为一个业务流程。如果您是一名业务分析师并于 2021 年 1 月 2 日上班,您将查看前一天的数据,而不是今天的数据。今天的数据尚未收集。

同样的模式也适用于每周或每月的间隔。该周或该月的数据要到该周期结束后才能发挥作用。

当您开始使用宏和 jinja 模板时,这也更有意义。

希望现在一切都变得清晰如泥。


dor*_*mon 5

这实际上是 Airflow 2.0.0 版本中的一个错误,已在 2.0.1 中修复: https: //github.com/apache/airflow/issues/13434