配置 Amazon MWAA 自动扩缩 - Amazon Managed Workflows for Apache Airflow
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配置 Amazon MWAA 自动扩缩

自动扩缩机制会自动增加 Apache Airflow 工作线程的数量,以响应 Amazon MWAA环境中正在运行和排队的任务,并在没有其他任务排队或正在执行时处置额外的工作线程。本页介绍如何使用 Amazon MWAA 控制台指定在环境中运行的 Apache Airflow 工作线程的最大数量,从而配置自动扩缩。

注意

Amazon MWAA 使用 Apache Airflow 指标来确定何时需要额外的 Celery 执行程序工作线程,并根据需要将 Fargate 工作线程数增加到 max-workers 指定的值。当该数量为零时,Amazon MWAA 会移除其他工作线程,缩减到 min-workers 值。有关更多信息,请参阅以下 工作原理 章节。

缩减时,可以计划新任务。此外,设置为删除的工作线程可以在其容器被移除之前接管这些任务。接管时间可能持续两到五分钟,这要归因于多种因素:发送 Apache Airflow 指标所需的时间、检测到零任务的稳定状态的时间以及移除 Fargate 工作线程所花费的时间。

如果您在持续工作负载时使用 Amazon MWAA,然后是无工作负载的时期,则不会受到此限制的影响。但是,如果工作负载间歇性很高,使用率反复很高,然后在大约五分钟内没有任务,那么当在缩减的工作线程上运行的任务被删除并标记为失败时,您可能会受到此问题的影响。如果您受到此限制的影响,我们建议您执行以下任一操作:

  • 设置 min-workers 等于 max-workers,足以满足平均工作负载的容量,如果这种模式持续到 24 小时的大部分时间,则更可取,因为在这种情况下,自动扩缩的价值有限。

  • 确保一个 DAG 中至少有一个任务(例如 DateTimesSensor)在这段间歇性活动期间正在运行,以防止不必要的缩减。

最大工作线程计数

下图显示了您可以在哪里自定义最大工作线程计数,以在 Amazon MWAA 控制台上配置自动扩缩。


          此图显示了您可以在 Amazon MWAA 控制台的哪里找到最大工作线程计数。

工作原理

Amazon MWAA 使用 RunningTasksQueuedTasks 指标,其中(正在运行的任务 + 排队的任务)/(每个工作线程的任务数)=(所需工作线程)。如果所需的工作线程数大于当前工作线程数,Amazon MWAA 将在该值中添加 Fargate 工作线程容器,但不得超过 max-workers 指定的最大值。

RunningTasksQueuedTasks 指标在两分钟内总和为零时,Amazon MWAA 会请求 Fargate 将工作线程数设置为环境的 min-workers 值。Amazon MWAA 为 Fargate 提供了 120 秒(目前的最大可用时间)的 stopTimeout 值,以允许在工作线程上完成任何工作,之后将移除容器并删除所有正在进行的剩余工作。在大多数情况下,队列中没有任务时会发生这种情况,但是在本页前一节提及的某些条件下,缩减时任务可能会排队。

在您创建环境时,Amazon MWAA 会在位于不同可用区的两个私有子网中分别创建一个 AWS 托管的 Amazon Aurora PostgreSQL 元数据数据库和一个 Fargate 容器。例如,us-east-1a 中的元数据数据库和容器,以及在 us-east-1 区域的 us-east-1b 可用区中的元数据数据库和容器。

  • Amazon MWAA 环境中的 Apache Airflow 工作线程使用 Celery 执行程序从 Apache Airflow 平台将任务排队并分配给多个 Celery 工作线程。Celery 执行程序在 Amazon Fargate 容器中运行。如果一个可用区中的 Fargate 容器出现故障,Amazon MWAA 会切换到另一个可用区中的另一个容器来运行 Celery 执行程序,Apache Airflow 计划程序会在 Amazon Aurora PostgreSQL 元数据数据库中创建一个新的任务实例。

  • 默认情况下,Amazon MWAA 将环境配置为(在 core.parallelism 中)同时运行数百个任务,(在 core.dag_concurrency 中)同时运行工作线程。当任务排队时,Amazon MWAA 会添加工作线程以满足需求,直至达到您在最大工作线程计数中定义的数量。

  • 例如,如果您将值指定为 10,则 Amazon MWAA 会添加最多 9 个额外工作线程,以满足需求。这种自动扩缩机制将继续运行其他工作线程,直到没有其他任务要运行。如果没有更多正在运行的任务,或者队列中也没有更多的任务,Amazon MWAA 就会处置工作线程并缩减为单个工作线程。

使用 Amazon MWAA 控制台

您可以在 Amazon MWAA 控制台上选择可在环境中同时运行的最大工作线程数。默认情况下,您可以指定最大值,最大值为 25。

要配置工作线程数,请执行以下操作
  1. 在 Amazon MWAA 控制台上打开环境页面

  2. 选择环境。

  3. 选择编辑

  4. 选择下一步

  5. 环境类窗格上,在最大工作线程计数中输入一个值。

  6. 选择保存

注意

更改可能需要几分钟才能生效。

高性能用例示例

下一节介绍可用于在环境中实现高性能和并行性的配置类型。

本地 Apache Airflow

通常,在本地 Apache Airflow 平台中,您需要在 airflow.cfg 文件中配置任务并行度、自动扩缩和并发设置:

  • core.parallelism— 每个计划程序可以同时运行的最大任务实例数。

  • core.dag_concurrency— DAG(非工作线程)的最大并发度。

  • celery.worker_autoscale— 可在任何工作线程上同时运行的最大和最小任务数。

例如,如果 core.parallelism 设置为 100core.dag_concurrency 设置为 7,则只有在拥有 2 个 DAG 的情况下,您仍然能够同时运行总共的 14 个任务。假设,即使总体并行度设置为 100(在 core.parallelism 中),每个 DAG 也只能同时运行七个任务(在 core.dag_concurrency 中)。

在Amazon MWAA 环境中

在 Amazon MWAA 环境中,您可以使用 在 Amazon MWAA 上使用 Apache Airflow 配置选项配置 Amazon MWAA 环境类最大工作线程计数自动扩缩机制直接在 Amazon MWAA 控制台上配置这些设置。在下拉列表中,虽然 core.dag_concurrency 未作为 Amazon MWAA 控制台上的 Apache Airflow 配置选项提供,但您可以将其添加为自定义 Apache Airflow 配置选项

比方说,当您创建环境时,您选择了以下设置:

  1. mw1.small 环境类,用于控制默认情况下每个工作线程可以运行的最大并发任务数和容器的 vCPU。

  2. 最大工作线程计数中的 10 工作线程的默认设置。

  3. Apache Airflow 配置选项,适用于每个工作线程的 5,5 个任务的 celery.worker_autoscale

这意味着您可以在环境中运行 50 个并发任务。任何超过 50 的任务都将排队,并等待正在运行的任务完成。

运行更多并发任务。您可以使用以下配置修改环境以同时运行更多任务:

  1. 通过选择 mw1.medium(默认为 10 个并发任务)环境类,增加每个工作线程默认可以运行的最大并发任务数和各个容器的 vCPU。

  2. 添加 celery.worker_autoscale 作为 Apache Airflow 配置选项

  3. 增加最大工作线程计数。在此示例中,将最大工作线程从 10 增加到 20 会使环境可以运行的并发任务数增加一倍。

指定最低工作线程数。您还可以使用 Amazon Command Line Interface(Amazon CLI)指定在环境中运行的 Apache Airflow 工作线程的最小和最大数。例如:

aws mwaa update-environment --max-workers 10 --min-workers 10 --name YOUR_ENVIRONMENT_NAME

要了解更多信息,请参阅 Amazon CLI 中的 update-environment 命令。

对停留在运行状态的任务进行故障排除

在极少数情况下,Apache Airflow 可能会认为还有任务仍在运行。要解决此问题,您需要清除 Apache Airflow UI 中的滞留任务。有关更多信息,请参阅 我看到我的任务卡顿或者没有完成 故障排除主题。

接下来做什么?