【问题标题】:How to increase tasks queued per second?如何增加每秒排队的任务?
【发布时间】:2020-06-05 05:08:31
【问题描述】:

我正在尝试诊断性能不佳的气流管道,并想知道我应该从气流调度程序中获得什么样的性能,类似于“每秒调度的任务”。

我几乎没有排队的作业,而且我的许多任务在几秒钟内完成,所以我怀疑调度程序是限制组件,我有很多快速任务是我的错。不过,如果可以避免的话,我宁愿不重写我的 DAG。

如何提高调度程序对任务进行排队的速率?


管道详情

Here is what my current airflow.cfg looks like.

我只有两个 dags 在运行。一个每 5 分钟安排一次,另一个很少由第一个触发。我目前正试图以这种频率回填几年,但可能需要改变我的方法:

至于工作节点:我目前有 4 个相当强大的服务器运行,在磁盘、网络、cpu、RAM、交换方面的资源使用率不到 10%。关闭 3 个工作人员对我的任务吞吐量没有影响,并且服务器保持打开状态甚至几乎没有记录工作量的变化。

【问题讨论】:

    标签: airflow airflow-scheduler


    【解决方案1】:

    airflow.cfg 中有许多可能与此相关的配置值。

    [core]下:

    • parallelism:一次可以运行的任务实例总数。
    • dag_concurrency:每次 DAG 运行可以运行的任务实例的限制,如果您有许多并行任务,可能需要增加。定义 DAG 时可以覆盖。
    • non_pooled_task_slot_count:未配置可立即运行的池的任务限制。
    • max_active_runs_per_dag:每个 DAG 运行的活动 DAG 的最大数量。如果您要手动触发运行,或者有 DAG 运行的备份计划以较短的时间间隔进行。定义 DAG 时可以覆盖。

    [scheduler]下:

    [worker]下:

    • celeryd_concurrency: celery 将运行的工人数量,因此基本上一个工人可以一次执行的任务实例数。匹配 CPU 数量是一个流行的起点,但绝对可以更高。

    最后一个仅当您使用 CeleryExecutor 时,如果您希望提高任务吞吐量,我绝对会推荐它。

    【讨论】:

    • 感谢您对配置值的精彩总结。我一直在玩其中的一些,并没有看到任务吞吐量有太大变化。我在我的问题中添加了指向我的airflow.cfg 的链接。
    • 你能知道你有多少个 DAG,它们运行的​​频率,以及它们有多少任务?也许值得关注调度程序日志,看看是否存在任何瓶颈(它会打印每个 DAG 每 30 秒处理多长时间的统计信息)。
    • 还有多少工人?只是想知道它与您估计的任务吞吐量相比如何。
    • 这些都是好问题;我已经更新了我的问题,以包括我的 DAG 和工人的详细信息。我知道几十年来回填 5 分钟的频率可能是不现实的,但我仍然想探索如何优化调度程序的性能。我没想到要检查日志;希望我能从今天的观察中学到更多。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2016-10-19
    • 1970-01-01
    • 2021-12-18
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多