介绍在 EKS 上运行的 Amazon EMR 与 Apache Flink:一个可扩展、可靠且高效
在 EKS 上推出 Amazon EMR 与 Apache Flink 的数据处理平台
by Kinnar Kumar Sen Alex Lines Mengfei Wang 和 Jerry Zhang 于2024年5月28日发表在 Amazon Elastic Kubernetes Service Amazon EMR EKS 上的 Amazon EMR 分析 计算 容器 中级(200) 技术如何做永久链接 评论 分享

AWS 最近宣布 Apache Flink 在 Amazon EMR on Amazon Elastic Kubernetes Service (EKS) 上 正式发布。Apache Flink 是一个可扩展、可靠和高效的数据处理框架,能够处理实时流和批量工作负载但通常更常用于实时流处理。Amazon EMR on EKS 是 Amazon EMR 的一种部署选择,使您能够在 Amazon EKS 集群上使用 EMR 运行时运行开源大数据框架,如 Apache Spark 和 Flink。通过在 EMR on EKS 中添加对 Flink 的支持,您现在可以使用 EMR 运行时在 Amazon EKS 上运行 Flink 应用程序,从而更高效、安全地部署、扩展和操作 Flink 应用程序。
在这篇文章中,我们将介绍 EMR on EKS 与 Apache Flink 的功能,讨论其优势,并强调如何开始使用。
重点总结
通过 Amazon EMR on EKS,AWS 客户可以更轻松地处理大规模数据工作负载。此平台通过稳定的构架和多重租户支持,帮助数据工程师专注于应用开发,同时简化基础设施的管理。EMR 运行时提供了自动化的管理、性能优化与安全合规性,还支持 Apache Flink,在效率上提供了巨大提升。
EMR on EKS 的数据工作负载
AWS 客户正迅速采用 EMR 运行时与 Amazon EKS 作为基础协调器,以充分利用这些平台的互补功能。这使得多租户的环境成为可能,数据工程师和数据科学家可以专注于构建数据应用,而平台工程师和网站可靠性工程SRE团队则可以管理基础设施。对这些客户而言,Amazon EKS 的一些主要好处包括:
优势描述AWS 管理的控制平面提高弹性,减少日常操作工作的负担多租户和基于资源的访问策略 (RBAC)构建成本有效的平台并执行组织范围的治理政策Kubernetes 的可扩展性安装开源附加组件可观测性、安全性、笔记本以满足特定需求EMR 运行时提供以下好处:
处理管理安装、配置、打补丁和备份等日常操作的重担简化扩展流程优化性能和成本通过与其他 AWS 服务和工具集成实现安全与合规性EMR on EKS 与 Apache Flink 的优势
根据工作负载规格选择实例类型、价格以及 AWS 区域和可用区的灵活性,常常是可靠性、可用性和成本优化的主要驱动力。Amazon EMR on EKS 原生集成工具和功能,使您能够实现这些及更多内容。
整合现有的工具和流程,如持续集成和持续开发 (CI/CD)、可观测性和治理政策,有助于统一所用工具并减少新服务的上线时间。许多客户已经为他们的 Amazon EKS 基础设施部署了这些工具和流程,现在您可以轻松地将其扩展至在 EMR on EKS 运行的 Flink 应用程序。如果您有意提升 Kubernetes 和 Amazon EKS 的能力,我们建议使用 EKS Blueprints,它为您提供一个起点,以构建包含所需操作软件的完整 EKS 集群。
在 EMR on EKS 上运行 Flink 应用程序的另一个好处是提高了应用程序的可扩展性。Flink 应用程序处理的数据的数量和复杂性会根据如一天中的时间、每周的某天、季节或与特定市场活动或其他活动相关的因素而出现显著变化。这种波动性使得客户在过度配置导致资源使用效率低下及费用增加和不足配置可能会影响延迟和吞吐率的 SLA,甚至造成服务中断之间权衡。在 EMR on EKS 上运行 Flink 应用程序时,Flink 自动扩展器将根据所摄取的数据增加应用程序的并行度,而 Amazon EKS 的自动扩展功能通过 Karpenter 或 Cluster Autoscaler将底层所需的容量扩展以满足这些需求。除了向上扩展外,当资源不再需要时,Amazon EKS 也可以缩减您的应用,使您的 Flink 应用更具成本效率。
在 EKS 上运行 EMR 和 Flink 允许您在同一个集群上运行多个版本的 Flink。使用传统的 Amazon Elastic Compute Cloud (Amazon EC2) 实例时,每个版本的 Flink 都需要在自己的虚拟机上运行,以避免资源管理或冲突的依赖和环境变量问题。然而,容器化 Flink 应用程序使您能够隔离版本以避免冲突,用 Amazon EKS 运行它们使您能够利用 Kubernetes 作为统一的资源管理器。这意味着您可以灵活地选择最适合每个作业的 Flink 版本,并提高了您将单个作业升级到 Flink 下个版本的敏捷性,而不是必须升级整个集群,或启动专用的 EC2 实例来运行不同版本的 Flink,这样会增加成本。
EMR on EKS 的关键差异点
在这一部分,我们讨论 EMR on EKS 的关键差异点。
在扩展或故障恢复期间快速重启 Flink 作业
这一点是通过 Amazon Elastic Block Store (Amazon EBS) 卷的任务本地恢复和适应性调度器中的细粒度恢复支持来实现的。
鲸鱼加速器破解版Amazon EMR 6150 及更高版本支持通过 EBS 卷进行 TaskManager pod 的任务本地恢复。默认覆盖安装提供 10 GB 的存储,适合状态较低的作业。状态较大的作业可以启用自动 EBS 卷挂载选项。TaskManager pods 在创建时会自动生成和挂载,并在删除时移除。
适应性调度器中细粒度恢复的支持仅在 Amazon EMR 6150 及更高版本可用。当任务在运行期间失败时,细粒度恢复仅重启与失败任务相连的管道组件,而不是重置整个图,并以从最后一个完成的检查点触发完整重跑,这比仅重新运行失败任务更省钱。要启用细粒度恢复,请在 Flink 配置中设置以下配置:
jobmanagerexecutionfailoverstrategy regionrestartstrategy exponentialdelay or fixeddelay
使用客户管理的密钥进行日志记录和监控支持
监控和可观测性是 AWS WellArchitected 框架的关键组成部分,因为它们有助于您了解、测量并适应操作变化。您可以在使用 EMR on EKS 的 Apache Flink 时启用对启动 Flink 作业的监控。如果在安装 Flink 操作员时启用,Amazon Managed Service for Prometheus 将被自动部署,它可以帮助分析针对 Flink 操作员、作业和 TaskManager 发出的 Prometheus 指标。
您可以通过使用端口转发的方式访问 Flink UI 来监控 Flink 作业的健康状况和性能。我们还启用了将操作员和应用日志收集和归档到 Amazon Simple Storage Service (Amazon S3)或 Amazon CloudWatch 的功能,使用 FluentD 边车实现。这可以通过部署的客户资源定义 (CRD) 中的 monitoringConfiguration 块启用:
monitoringConfiguration s3MonitoringConfiguration logUri S3 BUCKET encryptionKeyArn CMK ARN FOR S3 BUCKET ENCRYPTION cloudWatchMonitoringConfiguration logGroupName LOG GROUP NAME logStreamNamePrefix LOG GROUP STREAM PREFIX sideCarResources limits cpuLimit 500m memoryLimit 250Mi containerLogRotationConfiguration rotationSize 2Gb maxFilesToKeep 10
使用 Amazon EC2 Spot 实例实现成本优化
Amazon EC2 Spot 实例 是一种 Amazon EC2 定价选项,提供高达 90 的折扣。它是运行大数据工作负载的首选选择,因为它有助于提高吞吐量和优化 Amazon EC2 花费。Spot 实例是空闲的 EC2 容量,一旦 Amazon EC2 需要这些容量进行按需请求,就可能会被中断。Flink 流作业在 EMR on EKS 上可以响应 Spot 实例的中断,执行对正在运行作业的即时检查点 (JIT),并防止在这些 Spot 实例上调度更多任务。在重启作业时,不仅作业将从检查点重启,还将提供一种最佳努力机制,以在达到目标资源并行度或当前配置窗口结束后重启作业。这可以防止因 Spot 实例在短时间内停止而导致的连续作业重启,并有助于降低成本和提高性能。
为了减少 Spot 实例中断的影响,建议您采用 Spot 实例最佳实践。组合重启机制和 JIT 检查点只在适应性调度器中提供。
与 AWS Glue 数据目录的集成,作为 Flink 应用程序的元数据存储
AWS Glue 数据目录 是用于各种数据源的数据资产的集中元数据存储库,提供了统一的接口来存储和查询有关数据格式、架构和源的信息。Amazon EMR on EKS 和 Apache Flink 6150 及更高版本支持使用数据目录作为流和批 SQL 工作流的元数据存储。这进一步增强了对数据理解的能力,并确保其正确转换。
与 Amazon S3 的集成,实现韧性和操作效率
Amazon S3 是 AWS 用户存储数据、应用程序 JAR 和脚本的首选云对象存储。EMR on EKS 与 Apache Flink 可以通过部署规范获取应用程序 JAR 和脚本如 PyFlink,这省去了在 Flink 应用模式中构建自定义镜像的需要。当启用在 Amazon S3 上检查点时,管理状态会被持久化,以便在发生故障时提供一致的恢复。使用 Amazon S3 获取和存储文件是通过两个不同的 Flink 连接器实现的。我们建议在检查点时使用 Presto S3 (s3p),以及在读取和写入文件包括 JAR 和脚本时使用 s3 或 s3a。以下是示例代码:
spec flinkConfiguration taskmanagernumberOfTaskSlots 2 statecheckpointsdir s3p//ltBUCKETNAMEgt/flinkcheckpoint/job jarURI s3//ltS3BUCKETgt/scripts/pyflinkpy # 注意,这将触发工件下载过程 entryClass orgapacheflinkclientpythonPythonDriver
使用 IRSA 的基于角色的访问控制
IAM 角色用于服务账户 (IRSA) 是在 Amazon EKS 上实现基于角色的访问控制 (RBAC) 的推荐方式。EMR on EKS 与 Apache Flink 默认创建两个角色IRSA,分别用于 Flink 操作员和 Flink 作业。操作员角色用于 JobManager 和 Flink 服务,而作业角色则用于 TaskManagers 和 ConfigMaps。这有助于限制 AWS 身份和访问管理 (IAM) 权限的范围,提高凭证隔离性和可审计性。
开始使用 EMR on EKS 与 Apache Flink
如果您想在最近推出的 EMR on EKS 上运行 Flink 应用程序,请查阅 在 EMR on EKS 上运行 Flink 作业,其中提供了逐步指导以部署、运行和监控 Flink 作业。
我们还为 EMR on EKS 的 Flink 流 创建了一份基础设施即代码 (IaC) 模板,作为 Data on EKS (DoEKS) 的一部分,这是一项开源项目,旨在简化和加速在 Amazon Elastic Kubernetes Service (EKS) 上构建、部署和扩展数据和 ML 工作负载的过程。这个模板将帮助您快速构建 EMR on EKS 和 Flink 集群,并评估本文中提到的功能。这个模板内置了最佳实践,因此如果您决定将其作为应用程序的一部分在您的环境中使用,它可以作为您在 EKS 上部署 EMR 和 Flink 的基础。
结论
在本文中,我们探讨了最近推出的 EMR on EKS 与 Flink 的功能,以帮助您理解如何在可管理、可扩展、可靠和成本优化的 EMR on EKS 集群上运行 Flink 工作负载。如果您计划在 Kubernetes 上运行/探索 Flink 工作负载,请考虑在 EMR on EKS 与 Apache Flink 上运行它们。请联系您的 AWS 解决方案架构师,他们将在您的创新旅程中提供协助。
关于作者
Kinnar Kumar Sen 是 Amazon Web Services (AWS) 的高级解决方案架构师,专注于灵活计算。作为 EC2 灵活计算团队的一部分,他与客户合作,引导他们选择适合其在 AWS 上运行的工作负载的最具弹性和高效的计算选项。Kinnar 在研究、咨询、工程和架构领域拥有超过 15 年的行业经验。
Alex Lines 是 AWS 的首席容器专家,帮助客户在 Amazon EKS 上现代化他们的数据和机器学习应用。
Mengfei Wang 是一名软件开发工程师,专注于构建大型且稳健的软件基础设施,以支持 EMR on EKS 团队内的容器和 Kubernetes