我有大约一百万个Airflow任务,它们使用相同的python函数。每个操作都需要使用不同的开始日期和参数。
我之前曾向question询问如何在一个DAG下运行两个这样的任务。但是,当任务很多时,答案就无法扩展。 (请参阅链接和注释)
问题
我如何在Airflow上以可扩展的方式运行一百万个(或任何大量)任务,其中每个任务都来自相同的python函数,但是具有不同的开始日期和不同的参数?
注释
任务无需在PythonOperator
上运行(因为它们源自python函数)。实际上,它们很可能以分布式方式在Kubernetes集群上运行(因此使用KubernetesExecutor
或KubernetesPodOperator
)。无论哪种方式,DAG贡献背后的体系结构问题仍然存在。)
解决方案
我想到的一个解决方案是,在一个DAG下,动态构造所有任务,并在执行的python函数中传递不同的开始日期。在外部,Airflow每天都会执行每个任务,但是在功能内部,如果const article = req.em.create(Article, dto)
早于execution_date
,则功能只会start_date
。
答案 0 :(得分:1)
在发表评论后,我认为我可以得到答案:
气流可以用于数百万个动态任务,但不能。气流DAG应该相当稳定。例如,您仍然可以使用Airflow处理整个用户群(从某个地方给定),并在以后的ETL过程中使用此信息。
我建议您在Celery library之上构建您的任务系统(不要搞混Airflow中的CeleryExecutor
,因为Airflow可以在Celery之上使用)。这是一个任务队列,专注于数百万个实时任务:
芹菜用于生产系统中,每天处理数百万个任务。
Celery用Python编写,可用于生产环境,稳定且可扩展性极佳。我认为这是解决您问题的最佳工具。