作者 Francisco Morillo 和 Deepthi Mohan 发表于 2024年1月10日,Amazon CloudWatch,Amazon EventBridge,Amazon 管理服务的 Apache Flink,AWS Lambda,AWS Step Functions,最佳实践和技术如何做永久链接 评论
成千上万的开发者使用 Apache Flink 构建流媒体应用程序,以实时转换和分析数据。Apache Flink 是一个开源框架和数据流处理引擎,具有高可用性和可扩展性,为最严格的流处理应用程序提供高吞吐量和低延迟。在生产环境中,监控和扩展您的应用程序是确保它们能够成功运行的关键。
Amazon 管理服务的 Apache Flink 是一个完全托管的服务,降低了构建和管理 Apache Flink 应用程序的复杂性。该服务管理底层 Apache Flink 组件,提供持久应用状态、指标、日志等功能。
在本文中,我们展示了如何通过 Amazon 管理服务的 Apache Flink 自动上下调 KPUsKinesis 处理单元;1 KPU 等于 1 vCPU 和 4 GB 内存的数量。我们介绍了如何基于 CPU、内存、背压或任何自定义度量进行扩展。此外,我们还展示了如何执行计划扩展,允许您在特定时间调整应用程序的容量,特别是在处理可预测的工作负载时。我们还分享了一个 AWS CloudFormation 工具,帮助您快速实现 Amazon 管理服务的 Apache Flink 应用程序的自动扩展。
本节描述如何为 Amazon 管理服务的 Apache Flink 实现基于 Amazon CloudWatch 指标的扩展解决方案。Amazon 管理服务的 Apache Flink 提供了开箱即用的 自动扩展,当容器的 CPU 利用率在 15 分钟内超过 75 时,自动进行扩展。这对于许多用例而言表现良好;但是,对于某些应用程序,您可能需要根据其他指标进行扩展,或在特定时间触发扩展操作。您可以自定义您的扩展策略,并通过这种工具根据需求合理调整 Amazon 管理的 Apache Flink 应用程序。
要实现基于指标的扩展,我们使用 CloudWatch 警报、Amazon EventBridge、AWS Step Functions 和 AWS Lambda。您可以选择来自源的指标,例如 Amazon Kinesis 数据流 或 Amazon 管理的 Apache Kafka 流媒体服务Amazon MSK,或者来自 Amazon 管理服务的 Apache Flink 应用程序的指标。您可以在其 GitHub 仓库 中找到这些组件的 CloudFormation 模板。
以下图表展示了如何响应 CloudWatch 警报扩展 Amazon 管理服务的 Apache Flink 应用程序。
该解决方案使用所选择的指标来创建两个 CloudWatch 警报,依据您所使用的阈值,触发 EventBridge 中的规则以开始运行 Step Functions 状态机。下面的图表说明了状态机的工作流程。
注意 Amazon Kinesis 数据分析于 2023 年 8 月更名为 Amazon 管理服务的 Apache Flink。

Step Functions 的工作流包含以下步骤:
状态机描述了 Amazon 管理服务的 Apache Flink 应用程序,提供有关当前 KPUs 数量的信息,以及应用程序是否正在更新或正在运行。状态机调用一个 Lambda 函数,该函数根据触发的警报上下调整应用程序,遵循 CloudFormation 模板中设定的参数。在扩展应用程序时,该函数将使用 CloudFormation 模板中定义的增加因子可以加/减或根据该因子乘/除。您可以为扩展和收缩设置不同的因子。如果想采取更谨慎的扩展方式,可以选择加/减并将收缩/扩展的增加因子设为 1。如果应用已达到 CloudFormation 模板参数设置的最大或最小 KPUs 数量,工作流将停止。请注意,Amazon 管理服务的 Apache Flink 应用程序默认的最大 KPUs 数量为 64您可以申请增加此限制。如果没有请求增加配额,则不要将最大值指定为超过 64 KPUs,否则扩展解决方案将因无法更新而卡住。如果工作流继续,因为分配的 KPUs 未达到最大或最小值,工作流将等待您指定的一段时间,然后描述该应用程序以查看是否已完成更新。工作流将继续等待,直到应用程序更新完成。当应用程序更新后,工作流将等待您在 CloudFormation 模板中设定的时间,以使指标落入阈值范围,并使 CloudWatch 规则从 ALARM 状态变为 OK。如果指标仍处于 ALARM 状态,工作流将重新开始,并持续对应用程序进行上下扩展。如果指标处于 OK 状态,工作流将停止。对于从 Kinesis 数据流源读取的应用程序,您可以使用指标 millisBehindLatest。如果使用 Kafka 源,则可以使用 records lag max 来触发扩展事件。这些指标捕获应用程序与数据流头部的滞后程度。您还可以使用您在 Apache Flink 应用程序中注册的自定义指标。
样本 CloudFormation 模板使您可以选择以下其中一个指标:
指标类型指标名称描述Amazon 管理服务的 Apache Flink 应用程序指标ContainerCPUUtilizationFlink 应用程序集群中任务管理器容器的总体 CPU 利用率百分比。ContainerMemoryUtilizationFlink 应用程序集群中任务管理器容器的总体内存利用率百分比。BusyTimeMsPerSecond应用程序繁忙的时间毫秒/秒。BackPressuredTimeMsPerSecond应用程序的背压时间毫秒/秒。LastCheckpointDuration完成最后一次检查点所需的时间毫秒。Kinesis 数据流指标MillisBehindLatest消费者落后于数据流头部的毫秒数,指示消费者与当前时间之间的时间滞后。IncomingRecords在指定时间段内成功放入 Kinesis 数据流的记录数量。没有记录时,此指标为 null,您将无法进行缩减。Amazon MSK 指标MaxOffsetLag一个主题中各个分区的最大偏移滞后。SumOffsetLag一个主题中所有分区的总偏移滞后。EstimatedMaxTimeLag清空最大偏移滞后的时间估算秒。自定义指标作为 Apache Flink 应用程序的一部分定义的指标,最常见的指标是计数器持续增加或仪表可以更新为最后一个值。使用此解决方案时,您需要在指标组中添加 kinesisAnalytics 维度,并在 CloudFormation 模板中提供自定义指标名称。如果您需要在自定义指标中使用更多维度,则需要修改 CloudWatch 警报以便能够使用您的特定指标。有关自定义指标的更多信息,请参考 使用自定义指标与 Amazon 管理服务的 Apache Flink。CloudFormation 模板会部署所需的资源及自动扩展代码。您只需指定 Amazon 管理服务的 Apache Flink 应用程序名称、希望扩展的指标以及触发警报的阈值。该解决方案默认使用指标的平均聚合及每个数据点的时间段为 60 秒。您可以在定义 CloudFormation 模板时配置评估周期和数据点以触发警报。
本节描述如何根据计划实现 Amazon 管理服务的 Apache Flink 扩展解决方案。要执行计划扩展,我们使用 EventBridge 和 Lambda,如下图所示。
这些组件在 GitHub 仓库 的 CloudFormation 模板中可用。
EventBridge 调度器根据 CloudFormation 模板部署时设定的参数被触发。您定义在高峰期应用程序的 KPU 以及非高峰期的 KPU。应用程序将根据一天中的时间运行这些 KPU 参数。
飞机代理加速器与前面的基于指标的扩展示例一样,CloudFormation 模板会部署所需的资源和扩展代码。您只需指定 Amazon 管理服务的 Apache Flink 应用程序名称及调度,使扩展器将应用程序修改为设定的 KPUs 数量。
在考虑这些解决方案时,请注意以下事项:
当扩展 Amazon 管理服务的 Apache Flink 应用程序时,您可以选择提高整个应用程序的并行性或修改每个 KPU 的并行性。后者允许您设置每个 KPU 可以调度的并行任务数量。此示例仅更新整体并行性,而不修改每个 KPU 的并行性。如果 ApplicationSnapshotConfiguration 中的 SnapshotsEnabled 设置为 true,Amazon 管理服务的 Apache Flink 将自动暂停应用程序,拍摄快照,并在每次更新或扩展时使用更新的配置恢复应用程序。根据状态大小,此过程可能会导致应用程序停机,但不会造成数据丢失。在使用基于指标的扩展时,您必须选择应用程序所能拥有的 KPUs 的最小和最大阈值。根据扩展的幅度,如果新期望的 KPU 超过或低于您的阈值,则该解决方案会将 KPUs 更新为等于您的阈值。使用基于指标的扩展时,您还必须选择冷却时间。这是您希望应用程序在被更新后等待的时间,以查看指标是否已从 ALARM 状态更改为 OK 状态。这个值取决于您愿意等待的时间,以便发生下一个扩展事件。使用基于指标的扩展时,您只能选择 CloudFormation 模板中列出的指标。然而,您可以修改警报以使用 CloudWatch 中的任何可用指标。如果您的应用程序需要在一段时间内不间断运行,我们建议使用计划扩展,以限制重要时间内的扩展。在本文中,我们介绍了如何通过集成 CloudWatch 的增强监控功能与 Step Functions 和 Lambda,为 Amazon 管理服务的 Apache Flink 应用程序启用自定义扩展。我们还展示了如何使用 EventBridge 配置应用程序的扩展计划。所有这些示例以及更多内容都可以在 GitHub 仓库 中找到。
Deepthi Mohan 是 Amazon 管理服务的 Apache Flink 团队的首席项目经理。
Francisco Morillo 是 AWS 的流解决方案架构师。Francisco 与 AWS 客户合作,帮助他们使用 AWS 服务设计实时分析架构,支持 Amazon 管理的流媒体 Apache KafkaAmazon MSK和 Amazon 管理服务的 Apache Flink。
加载评论
使用 AWS Glue 简化 SFTP 数据处理作者:Seun Akinyosoye Kamen Sharlandjiev Sean Bjurstrom Chris Scull Qiushuang Feng Vinod Jayendra Shengjie Luo日期:2024年8月13日分类:高级 ...
自动化训练:增强 Amazon Personalize 解决方案的灵活性关键要点Amazon Personalize 推出自动化训练功能,帮助模型保持推荐的准确性和相关性。定期更新解决方案以适应用户行为和偏好的变化,提高了模型的 predictive accuracy。用户可以轻松配置自动训练,提高...