【问题标题】:Use Airflow to run parametrized jobs on-demand and with a schedule使用 Airflow 按需并按计划运行参数化作业
【发布时间】:2021-02-10 05:39:56
【问题描述】:

我有一个报告应用程序,它使用 Celery 每天处理数千个工作。每个报告类型都有一个 Python 模块,用于封装所有作业步骤。作业采用客户特定的参数,通常在几分钟内完成。目前,作业由客户在创建新报告或请求刷新现有报告时按需触发。

现在,我想添加计划,这样作业每天都会运行,并且报告会自动刷新。我知道 Airflow 在任务编排和调度方面大放异彩。我也喜欢将我的工作表达为 DAG 并从任务重试中受益的想法。我可以看到如何使用 Airflow 运行预定的批处理作业,但我不确定我的用例。

如果我将我的工作表达为 Airflow DAG,我仍然需要为每个客户参数化运行它们。这意味着,如果客户创建一个新报告,我将需要有一种方法来触发具有客户特定配置的 DAG。通过预定的执行,我将需要枚举所有客户并为每个客户创建一个参数化的(子)DAG。我的理解这应该是可能的,因为 Airflow 支持动态创建的 DAG,但是,我不确定这是否是使用 Airflow 的有效且正确的方法。

我想知道是否考虑过在与我类似的场景中使用 Airflow。

【问题讨论】:

    标签: celery airflow


    【解决方案1】:

    Celery workflows 做同样的事情,并且您可以在任何时间创建和运行它们。此外,Celery 有一个非常好的调度器(我在使用 Celery 的 5 年中从未见过它失败)- Celery Beat。

    当然,Airflow 可以毫无问题地满足您的需求。

    【讨论】:

      【解决方案2】:

      您可以使用 Airflow 动态创建 DAG,但我不确定这是否适用于 1000 个 DAG 的规模。 Dynamically Generating DAGs in Airflow@astronomer.io 上有一些很好的例子。

      我有一些 DAG 和任务,它们是由具有不同计划和配置的 yaml 配置动态生成的。一切正常,没有任何问题。

      唯一可能具有挑战性的是“工作由客户按需触发” - 我想您可以使用Airflow's REST API 触发任何 DAG,但它仍处于实验状态。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-09
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 2016-06-20
        • 1970-01-01
        相关资源
        最近更新 更多