如何管理不同开始日期的一百万个气流任务?

时间:2019-03-25 14:08:09

标签: airflow

我有大约一百万个Airflow任务,它们使用相同的python函数。每个操作都需要使用不同的开始日期和参数。

我之前曾向question询问如何在一个DAG下运行两个这样的任务。但是,当任务很多时,答案就无法扩展。 (请参阅链接和注释)

问题

我如何在Airflow上以可扩展的方式运行一百万个(或任何大量)任务,其中每个任务都来自相同的python函数,但是具有不同的开始日期和不同的参数?

注释

任务无需在PythonOperator上运行(因为它们源自python函数)。实际上,它们很可能以分布式方式在Kubernetes集群上运行(因此使用KubernetesExecutorKubernetesPodOperator)。无论哪种方式,DAG贡献背后的体系结构问题仍然存在。)

解决方案

我想到的一个解决方案是,在一个DAG下,动态构造所有任务,并在执行的python函数中传递不同的开始日期。在外部,Airflow每天都会执行每个任务,但是在功能内部,如果const article = req.em.create(Article, dto) 早于execution_date,则功能只会start_date

1 个答案:

答案 0 :(得分:1)

在发表评论后,我认为我可以得到答案:

气流可以用于数百万个动态任务,但不能。气流DAG应该相当稳定。例如,您仍然可以使用Airflow处理整个用户群(从某个地方给定),并在以后的ETL过程中使用此信息。

我建议您在Celery library之上构建您的任务系统(不要搞混Airflow中的CeleryExecutor,因为Airflow可以在Celery之上使用)。这是一个任务队列,专注于数百万个实时任务:

  

芹菜用于生产系统中,每天处理数百万个任务。

Celery用Python编写,可用于生产环境,稳定且可扩展性极佳。我认为这是解决您问题的最佳工具。