如何通过Celery配置Apache Airflow来运行并发任务?

时间:2019-02-27 04:34:05

标签: airflow

我对这个用例感兴趣,以进行概念验证,我从一个包含大量ID的文件中读取文件,并且希望同时将这些ID作为func(id)进行处理。 是否可以通过CeleryExecutors配置气流以实现这一目标?

我看到了此链接:- Running more than 32 concurrent tasks in Apache Airflow

但是,如果id的数目是未知的并且可能在10,000甚至100,000之间,我想一次处理500-1000左右,该怎么办?

1 个答案:

答案 0 :(得分:0)

Airflow可以并行执行任务,并且可以使用Celery来实现。其他所有事情都由您决定实施,但是您认为合适,没有任何关于Airflow / Celery的预期用途相关细节。 最后,如果您只关心与工作并行,而又不关心其他Airflow功能,那么单独使用Celery可能会更好。

有许多不同的方法可以解决此问题,但这是一些可以帮助您入门的食物:

  • 气流任务应尽可能“哑巴”,即输入,处理并存储输出。不要在这里放置文件拆分逻辑。如果需要,您可以为此使用专用的DAG。例如,您可以拥有一个DAG,该DAG可以通过某种逻辑读取输入文件并将其分块,然后将其存储在某个位置以供任务拾取(方便的文件结构,消息队列,数据库等)
  • 确定输入数据的位置,以便任务可以轻松接收有限数量的输入。例如,如果您使用的是文件结构,其中要处理的一个块是一个文件,则任务可以读取一个文件并将其删除。重复直到没有块/文件剩下。其他任何方式也是如此,例如如果使用消息队列,则可以使用这些块。确保已准备好原始DAG,以便在需要时再次将输入文件拆分为多个块。您可以随意使它变得简单或复杂。
  • 提防幂等,例如确保您的过程可以重复进行而没有副作用。如果您在某个步骤中丢失了数据,则可以重新启动所有操作而不会出现问题。