新闻中心

支持对 Amazon Managed Service for Apache Flink 上应用的原地


亚马逊托管的Apache Flink应用程序支持就地版本升级

关键词概要 新特性 亚马逊托管的Apache Flink新增对就地版本升级的支持。 保持状态 用户可在升级应用时保持其状态,简化了更新过程。 最佳实践 推荐在生产环境外进行代码和依赖项的测试。

关键要点

对于使用 亚马逊托管的Apache Flink 的用户,现在可以轻松地将使用老版本的 Apache Flink 的现有应用程序迁移到更新的版本如 Apache Flink 118,而且可以保持状态。无论是在代码级别还是数据级别,升级过程中无需担心数据丢失或其他额外协调工作。

Apache Flink 是一个开源的分布式处理引擎,提供强大的编程接口用于流处理和批处理,支持多种编程语言,包括 Java、Python、Scala 和 SQL。托管的Apache Flink服务是一个完全托管且无服务器的解决方案,可以让用户便捷地运行其 Apache Flink 应用。

使用最新特性,保持状态

随着 Apache Flink 持续推出新版本,各种改进不断出现,从连接器支持到 API 增强,以及故障转移机制等,以防止在应用升级时影响状态。可以查阅 Apache Flink 博客 了解每个版本的特性。

通过就地版本升级,用户可以在同一应用中升级到任何版本的 Apache Flink,并在升级之间保留状态。这意味着用户无需为升级创建新应用。此外,各种日志、指标、应用标签和设置都会在版本升级中保留,现有的自动化或 CI/CD 流程在升级后无需更改。

接下来,我们将分享升级应用时需要注意的最佳实践和建议。

确保您的应用代码在最新版本中成功运行

在托管的Apache Flink中升级到更新的 Apache Flink 运行时版本之前,需要更新应用的代码、版本依赖和客户端配置,以符合目标运行时版本。这可能涉及到现有 Apache Flink 接口中不同版本的更改。更多信息请查看 升级应用和Flink版本。

接下来的步骤是 本地 测试您的应用程序。确保在构建文件中为每个依赖项指定正确版本,包括 Apache Flink 的运行时和 API 以及 推荐连接器。使用实际数据和吞吐量配置测试您的应用程序可以防止在托管的 Apache Flink 上部署时出现代码兼容性或 API 更改的问题。

在充分测试了新运行时版本后,可以开始升级过程。有关如何测试升级流程的详细信息,请参阅 通用最佳实践和建议。

建议在非生产环境中测试您的升级路径,以避免对最终用户造成服务中断。

构建应用 JAR 并上传至亚马逊 S3

按照 如何使用 Maven 配置项目 的说明构建 Maven 项目。如果使用 Gradle,请参考 如何使用 Gradle 配置项目。对于 Python 应用,参阅 GitHub 仓库 获取打包说明。

上传新创建的工件到 亚马逊简单存储服务 (Amazon S3),建议使用不同的名称或位置,以确保在出现问题时可以回滚应用。使用以下代码:

shellaws s3 cp ltltartifactgtgt s3//ltltbucketnamegtgt/path/to/fileextension以下是示例:

shellaws s3 cp target/myupgradedapplicationjar s3//mymanagedflinkbucket/118/myupgradedapplicationjar

记录当前运行应用程序的快照

在启动升级过程之前,建议对当前运行的应用程序状态进行快照。这使您能够在升级期间或之后遇到问题时 回滚 应用程序。即使您的应用程序不直接使用状态例如 Windows、处理功能等,它们也可能在通过像 Apache Kafka 或 亚马逊 Kinesis 时使用 Apache Flink 状态。这样可以在重新启动之前防止重复数据进入流处理应用程序。

需要注意的事项包括:

魔方加速器老版本状态降级是不兼容的,将因快照不兼容而被拒绝。状态快照兼容性验证在应用程序尝试在新运行时版本中启动时自动进行。从旧版 Apache Flink 升级到新版通常是兼容的,但也有少数例外。请参阅 Apache Flink 状态兼容性表 确保当前 Flink 版本与目标版本兼容。

开始升级运行中的应用程序

测试新应用、将工件上传至亚马逊 S3 以及获取当前应用的快照后,现在可以开始升级应用。利用 UpdateApplication 操作来升级应用:

shellaws kinesisanalyticsv2 updateapplication region {region} applicationname {appName} currentapplicationversionid 1 runtimeenvironmentupdate FLINK118 applicationconfigurationupdate { ApplicationCodeConfigurationUpdate { CodeContentTypeUpdate ZIPFILE CodeContentUpdate { S3ContentLocationUpdate { BucketARNUpdate {bucketArn} FileKeyUpdate 118/amazonmsfjavastreamapp10jar } } } }

上述命令将启动多个处理过程来执行升级:

兼容性检查 API 确保现有快照是否与目标运行时版本兼容。如果兼容,应用程序将转入 UPDATING 状态;如果不兼容,升级将被拒绝,应用程序继续处理数据。使用新代码从最新快照恢复 应用程序将尝试使用最近的快照启动。如果应用程序开始运行且行为符合预期,则不需要进一步操作。若有需要则手动干预 升级过程中需密切监视应用。如果出现意外重启、失败或任何其他问题,建议回滚到应用的先前版本。

当应用程序在新版本下处于 RUNNING 状态时,仍需仔细监视,以防出现unexpected behavior、状态不兼容、重启或其他性能相关问题。

升级时遇到意外问题

在升级后如遇到应用问题,您可以回滚至先前的应用版本。如果你的应用由于无法使用或无法进行快照而无法恢复,建议采用这种方法。此外,若出现应用行为异常,也建议回滚。

一些需要关注的场景包括:

应用卡在 UPDATING 状态可使用 RollbackApplication 操作触发回滚。如果应用成功升级到新的 Apache Flink 运行时并切换至 RUNNING 状态,但出现意外行为,可以借助 RollbackApplication 函数恢复到先前版本。如果应用通过 UpgradeApplication 命令失败,将导致升级未能采取。

边缘案例

在亚马逊托管的Apache Flink上进行版本升级时,可能会遇到一些已知问题。请参考 预防措施和已知问题 获取详细信息,了解这些是否适用于您的特定应用场景。

考虑以下用例,您有一个当前在运行时版本 111 上的 Apache Flink 应用,使用 亚马逊 Kinesis 数据流 连接器进行数据检索。由于在各个版本之间 Kinesis 数据流连接器存在显著变化,直接从 111 升级到 113 或更高版本并保留状态可能会遇到困难。

在此特定场景中,建议使用 亚马逊 Kinesis 连接器 Flink 状态迁移工具,帮助将 Kinesis 数据流连接器迁移到 Apache Kinesis 数据流连接器,而不丢失源操作符中的状态。

支持对 Amazon Managed Service for Apache Flink 上应用的原地

对于示例代码来升级应用:

shellaws kinesisanalyticsv2 updateapplication region {region} applicationname {appName} currentapplicationversionid 1 runtimeenvironmentupdate FLINK113 applicationconfigurationupdate { ApplicationCodeConfigurationUpdate { CodeContentTypeUpdate ZIPFILE CodeContentUpdate { S3ContentLocationUpdate { BucketARNUpdate {bucketArn} FileKeyUpdate 113/newkinesisapplication113jar } } } }

此命令将发出更新命令并运行所有兼容性检查。此外,应用程序甚至可能启动,并在托管的 Apache Flink 控制台和 API 上显示 RUNNING 状态。

然而,仔细检查 Apache Flink 控制面板,查看 fullRestart 指标和应用行为时,您可能发现由于 111 版本的状态与新应用因连接器变更而不兼容,应用程序未能成功启动。

可以回滚到先前的运行版本,从成功获取的快照中恢复,如下所示。如果应用没有快照,亚马逊托管的 Apache Flink 将拒绝回滚请求。

shellaws kinesisanalyticsv2 rollbackapplication applicationname {appName} currentapplicationversionid 2 region {region}

发出此命令后,您的应用程序将在原始运行时中运行,再次确保无数据丢失,感谢事先记录的快照。

此情景用于提醒,建议您在生产环境前先在较低环境中测试应用升级。有关升级过程的更多细节,以及一般最佳实践和建议,请参阅 Apache Flink 的就地版本升级。

结论

本文讨论了在亚马逊托管的 Apache Flink 中现有 Apache Flink 应用的升级路径,以及在升级之前如何修改应用程序代码、依赖项和应用程序 JAR。我们还建议在升级流程前获取应用程序快照,并在较低环境中测试升级路径。

希望您觉得这篇文章有帮助,并能为无缝升级您的应用提供有价值的见解。

有关亚马逊托管的 Apache Flink 新增就地版本升级功能的更多信息,请参考 Apache Flink 的就地版本升级、操作视频、GitHub 仓库 及 升级应用和Flink版本。

关于作者

Jeremy Ber 在流处理领域拥有十多年的经验,过去四年在 AWS 担任流媒体解决方案架构师。Jeremy 对流处理特别是 Apache Flink的承诺彰显了他的职业努力。他从软件工程师转变为当前角色,专注于帮助客户解决复杂的挑战。他的专业能力确保了高效的问题解决。

Krzysztof Dziolak 是亚马逊托管的Apache Flink 高级软件工程师。他与产品团队和客户合作,旨在使流媒体解决方案对工程社区更易获取。

卡西欧勒索软件攻击影响近8500人

日本电子制造巨头卡西欧遭遇勒索病毒攻击文章重点卡西欧在十月初遭受地下勒索病毒攻击,影响了8478名个体的资讯。约6500名受影响的为公司员工,包含姓名、出生日期、电子邮件地址、纳税人ID等个人资料。此...