Airflow 气流调度器计划后续任务的速度较慢

Airflow 气流调度器计划后续任务的速度较慢,airflow,airflow-scheduler,Airflow,Airflow Scheduler,当我尝试在Airflow 1.8.0中运行DAG时,我发现从完成前一个任务到提取后续任务执行(通常比单个任务的执行时间长)之间需要花费大量时间。顺序执行器、本地执行器和芹菜执行器的情况也是如此。有没有办法减少上面提到的开销时间?(与airflow.cfg中可以加快DAG执行速度的任何参数一样?) 已添加甘特图以供参考: 正如尼克所说,气流不是一个实时工具。任务会尽快安排和执行,但下一个任务永远不会在上一个任务之后立即运行 当你有超过100个DAG,每个任务中有3个任务,或者Dags有很多任务(1

当我尝试在Airflow 1.8.0中运行DAG时,我发现从完成前一个任务到提取后续任务执行(通常比单个任务的执行时间长)之间需要花费大量时间。顺序执行器、本地执行器和芹菜执行器的情况也是如此。有没有办法减少上面提到的开销时间?(与airflow.cfg中可以加快DAG执行速度的任何参数一样?) 已添加甘特图以供参考:

正如尼克所说,气流不是一个实时工具。任务会尽快安排和执行,但下一个任务永远不会在上一个任务之后立即运行

当你有超过100个DAG,每个任务中有3个任务,或者Dags有很多任务(100个或更多),你必须考虑3件事情:

  • 增加DagFileProcessorManager将用于加载和执行DAG的线程数(afflow.cfg):
  • [调度程序]

    最大螺纹数=2

    max_线程控制拾取和执行/终止DAG的数量()

    增加此配置可能会缩短任务之间的时间

  • 监控气流数据库,查看是否存在瓶颈。气流数据库用于管理和执行流程:
  • 最近我们也遇到了同样的问题。任务之间的时间间隔约为10-15分钟,我们在AWS上使用PostgreSQL

    实例没有很好地利用资源~20 IOPS,20%的内存和约10%的CPU,但气流非常缓慢

    在使用PgHero查看数据库性能之后,我们发现即使是在一个小表上使用索引的查询也要花费超过一秒钟的时间

    因此,我们增加了数据库的大小,气流现在运行得和火箭一样快。:)

  • 要获取气流加载DAG的时间,请运行以下命令:
  • 气流表\u dags-r

    DagBag解析时间:7.9497220000000075

    如果DagBag解析时间超过~5分钟,则可能是一个问题

    所有这些都有助于我们跑得更快。我真的建议您升级到1.9版,因为在这个版本上有许多性能问题已经解决了


    顺便说一句,我们在生产中使用Airflow master,使用LocalExecutor和PostgreSQL作为元数据数据库。

    您的甘特图以秒为单位显示内容。气流不是一个实时调度引擎。它以分钟为单位处理事情。
    如果你需要更快的运行,你可以考虑不同的调度工具。或者,您可以将所有工作放在一个任务中,这样您就不会受到调度程序延迟的影响。

    您的配置中的
    调度程序\u heartbeat\u sec
    是什么?也许你可以尝试减少它。只是好奇-你还记得甘特图中的数据使用了哪个执行器吗?我希望LocalExecutor和CeleryExecutor看起来会有点不同,至少在涉及多个节点的情况下是这样。我还不知道为什么,但对于1.10.7(可能是1.10.7+)和
    LocalExecutor
    ,任务之间的时间大致相当于
    min\u文件\u进程间隔
    设置中的秒数。也许试着缩短设置?嗨,尼克。你能说出提供实时调度的工具吗?嗨@RobertLugg-不幸的是,我没有对替代方案做过太多研究。目前,我们的组织一直处于空气流通状态。有很多选择,但我认为工作的抽象层次会有一些变化。。。有梅索斯,指挥家(Netflix),路易吉。。。“我不确定哪一种更具实时性。”罗伯特卢格的气流是建在芹菜上的。为了减少任务之间的时间间隔,您可以直接在芹菜上构建ETL管道平台。有很多关于这个的技术文档/博客,你应该可以找到easily@sudeepgupta90-气流不是建立在芹菜顶部,尽管它允许芹菜用作其任务执行器。根据OP考虑的工作的复杂性,您可能无意中建议构建一个全新的气流。。。这是一项艰巨的任务。如果气流的性能不能满足当前问题的要求,那么最好找到一个不同的框架并使用它。想想数百个配置选项,管理UI,错误处理,所有这些都是为你准备的。我已经有一段时间没有回到这个问题上来了@Marcos-您确定多进程调度器现在是否工作吗?我相信在1.7或1.8版本中会出现死锁场景,调度程序会锁定。相反,我们只需使用不同的目录运行多个
    airflow scheduler
    ,即可对dag进行批处理。此外,我还编写了一个dag缓存机制,可以在redis中缓存dag,以便长期运行dag包导入。另一件需要检查的事情是dag生成的代码,并确保除了定义dag之外,您不在其中执行任何操作。让任务实例来处理其他事情。不过,我觉得有些事情非常奇怪:运行回填时,任务之间需要40秒,尽管我有一个需要0.05秒才能解析的小DagBag。40秒的气流在做什么?我的场景:我有一些快速的工作,可以下载历史汇率数据,每天创建一个文件。我想再过几年。该任务需要4秒钟才能运行。任务之间的时间间隔为40秒,因此此顺序回填中的计算大部分是浪费时间;应该需要几个小时,而不是几天!请注意,我不能使用任务并行性,否则我的IP将被阻止。我希望看到您的问题的答案。我们在一个巨大的回填土上遇到了类似的问题。我们的dagbag也能很快解析。大约三年前我问过这个问题。这些年来,延误有所减少。我认为它将在气流2中显著降低