当我尝试在 Airflow 1.8.0 中运行 DAG 时,我发现在完成前任任务的时间和后继任务被拾取执行的时间之间需要很长时间(通常单个任务的执行时间更长)。Sequential、Local 和 Celery Executors 的场景也是如此。有没有办法减少提到的开销时间?(就像airflow.cfg中可以加快DAG执行的任何参数一样?)已添加甘特图以供参考:
2 回答
正如尼克所说,Airflow 不是实时工具。任务被尽快安排和执行,但下一个任务永远不会在上一个任务之后立即运行。
当你有超过 ~100 个 DAG,每个 DAG 有 ~3 个任务或 DAG 有很多任务(~100 或更多)时,你必须考虑 3 件事:
- 增加 DagFileProcessorManager 将用于加载和执行 Dags (airflow.cfg) 的线程数:
[调度器]
最大线程数 = 2
max_threads 控制选择和执行/终止多少 DAG(参见此处)。
增加此配置可能会减少任务之间的时间。
- 监控您的气流数据库,看看它是否有任何瓶颈。Airflow 数据库用于管理和执行流程:
最近我们遇到了同样的问题。任务之间的时间约为 10-15 分钟,我们在 AWS 上使用 PostgreSQL。
实例没有很好地使用资源;~20 IOPS、20% 的内存和 ~10% 的 CPU,但 Airflow 非常慢。
在使用 PgHero 查看数据库性能后,我们发现即使是在小表上使用索引的查询也需要花费超过一秒的时间。
所以我们增加了数据库的大小,Airflow 现在运行得像火箭一样快。:)
- 要获取 Airflow 加载 Dags 所花费的时间,请运行以下命令:
气流列表_dags -r
DagBag 解析时间:7.9497220000000075
如果 DagBag 解析时间高于约 5 分钟,则可能是个问题。
所有这些都帮助我们更快地运行 Airflow。我真的建议您升级到 1.9 版,因为此版本修复了许多性能问题
顺便说一句,我们在生产中使用 Airflow master,使用 LocalExecutor 和 PostgreSQL 作为元数据库。
您的甘特图以秒为单位显示事物。Airflow 并不是一个实时调度引擎。它处理几分钟的事情。如果您需要更快地运行,您可以考虑使用与气流不同的调度工具。或者,您可以将所有工作放在一个任务中,这样您就不会受到调度程序延迟的影响。