本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
升级到 Flink 2.2:完整指南
本指南提供了将适用于 Apache Flink 的亚马逊托管服务 Flink 应用程序从 Flink 1.x 升级到 Flink 2.2 的分步说明。这是一次主要版本升级,其中包含重大更改,需要仔细规划和测试。
主要版本升级是单向的
升级操作可以将您的应用程序从 Flink 1.x 移动到 2.2 并保留状态,但是在 2.2 状态下,您无法从 2.2 移动到 1.x。如果您的应用程序在升级后变得不健康,请使用 Rollback API 以最新快照中的原始 1.x 状态返回到 1.x 版本。
先决条件
在开始升级之前:
回顾 重大更改和弃用
确保您有一个非生产环境进行测试
记录您当前的应用程序配置和依赖关系
了解您的迁移路径
您的升级体验取决于您的应用程序与 Flink 2.2 的兼容性。了解这些路径有助于你做好适当的准备并设定切合实际的期望。
路径 1:兼容的二进制文件和应用程序状态
预期发生的情况:
调用升级操作
在应用程序状态过渡的情况下完成到 2.2 的迁移:
RUNNING→ →UPDATINGRUNNING保留所有应用程序状态,而不会丢失数据或重新处理数据
与次要版本迁移相同的体验
最适合:无状态应用程序或使用兼容序列化的应用程序(Avro、兼容的 Protobuf 架构、不带集合的 POJO)
路径 2:二进制文件不兼容
预期发生的情况:
调用升级操作
操作失败并通过操作 API 和日志显示二进制文件不兼容
启用自动回滚后:应用程序可在几分钟内自动回滚,无需您的干预
禁用自动回滚时:应用程序在不处理数据的情况下保持运行状态;您可以手动回滚到旧版本
修复二进制文件后,使用 UpdateApplication API 获得类似于 Path 1 的体验
最适合:使用 Flink 作业启动期间检测到的已删除 API 的应用程序
路径 3:不兼容的应用程序状态
预期发生的情况:
调用升级操作
最初迁移似乎成功
状态恢复失败后,应用程序将在几秒钟内进入重启循环
通过显示持续重启的 CloudWatch 指标检测故障
手动调用回滚操作
启动回滚后的几分钟内即可恢复生产
州移民审查您的申请
最适合:状态序列化不兼容的应用程序(带有集合的 POJO,某些状态) Kryo-serialized
注意
强烈建议先创建生产应用程序的副本,并在副本上测试以下每个升级阶段,然后再对生产应用程序执行相同的步骤。
第 1 阶段:准备
更新应用程序代码
更新您的应用程序代码,使其与 Flink 2.2 兼容:
在你的或中@@ 将 Flink 依赖项更新到版本 2.2.0
pom.xmlbuild.gradle将@@ 连接器依赖关系更新为兼容 Flink 2.2 的版本(请参阅)连接器可用性
移除已弃用的 API 用法:
将 DataSet API 替换为 DataStream API 或表 API/SQL
将旧版
SourceFunction/SinkFunction替换为 FLIP-27 源代码和 FLIP-143 接收器 API用 Java API 取代 Scala API 的用法
更新到 Java 17
上传更新的应用程序代码
使用 Flink 2.2 依赖项构建您的应用程序 JAR
使用与当前 JAR 不同的文件名上传到 Amazon S3(例如,
my-app-flink-2.2.jar)记下升级步骤中使用的 S3 存储桶和密钥
第 2 阶段:启用自动回滚
Auto-rollback 允许适用于 Apache Flink 的亚马逊托管服务在升级失败时自动恢复到以前的版本。
检查自动回滚状态
Amazon Web Services 管理控制台:
导航到您的应用程序
选择配置
在 “应用程序设置” 下,验证是否启用了系统回滚
Amazon CLI:
aws kinesisanalyticsv2 describe-application \ --application-name MyApplication \ --query 'ApplicationDetail.ApplicationConfigurationDescription.ApplicationSystemRollbackConfigurationDescription.RollbackEnabled'
启用自动回滚(如果未启用)
aws kinesisanalyticsv2 update-application \ --application-name MyApplication \ --current-application-version-id <version-id> \ --application-configuration-update '{ "ApplicationSystemRollbackConfigurationUpdate": { "RollbackEnabledUpdate": true } }'
第 3 阶段:拍摄快照(可选)
如果您的应用程序启用了自动快照,则可以跳过此步骤,否则请在升级之前拍摄应用程序的快照以保存应用程序的状态。
从正在运行的应用程序中拍摄快照
Amazon Web Services 管理控制台:
导航到您的应用程序
选择快照
选择创建快照
输入快照名称(例如,
pre-flink-2.2-upgrade)选择 Create(创建)。
Amazon CLI:
aws kinesisanalyticsv2 create-application-snapshot \ --application-name MyApplication \ --snapshot-name pre-flink-2.2-upgrade
验证快照创建
aws kinesisanalyticsv2 describe-application-snapshot \ --application-name MyApplication \ --snapshot-name pre-flink-2.2-upgrade
等到 SnapshotStatus is READY 之后再继续。
第 4 阶段:升级应用程序
您可以使用UpdateApplication操作升级 Flink 应用程序。
您可以通过多种方式调用 UpdateApplication API:
使用 Amazon Web Services 管理控制台。
转至 Amazon Web Services 管理控制台上的应用程序页面。
选择配置。
选择新的运行时和要从中启动的快照,也称为还原配置。使用最新设置作为还原配置,从最新的快照启动应用程序。指向 Amazon S3 JAR/zip 上新升级的应用程序。
使用 Amazon CLI
update-application操作。 使用 Amazon CloudFormation。
更新字
RuntimeEnvironment段。 Amazon CloudFormation 以前会删除该应用程序并创建一个新应用程序,这会导致您的快照和其他应用程序历史记录丢失。现在就RuntimeEnvironment地 Amazon CloudFormation 更新您的应用程序,并且不会删除您的应用程序。
使用 Amazon 软件开发工具包。
有关您选择的编程语言,请参阅 SDK 文档。请参阅
UpdateApplication。
您可以在应用程序处于 RUNNING 状态或应用程序在 READY 状态中停止时执行升级。适用于 Apache Flink 的亚马逊托管服务会验证原始运行时版本和目标运行时版本之间的兼容性。此兼容性检查在您处于状态UpdateApplication时执行,或者StartApplication如果您在RUNNING状态下升级,则在下次执行兼容性检查时运行。READY
从 “运行” 状态升级
aws kinesisanalyticsv2 update-application \ --application-name MyApplication \ --current-application-version-id <version-id> \ --runtime-environment-update FLINK-2_2 \ --application-configuration-update '{ "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "FileKeyUpdate": "my-app-flink-2.2.jar" } } } }'
从 “就绪” 状态升级
aws kinesisanalyticsv2 update-application \ --application-name MyApplication \ --current-application-version-id <version-id> \ --runtime-environment-update FLINK-2_2 \ --application-configuration-update '{ "ApplicationCodeConfigurationUpdate": { "CodeContentUpdate": { "S3ContentLocationUpdate": { "FileKeyUpdate": "my-app-flink-2.2.jar" } } } }'
第 5 阶段:显示器升级
兼容性检查
使用操作 API 检查升级状态。如果存在二进制文件不兼容或作业启动问题,则升级操作将失败并显示日志。
如果升级操作成功但应用程序陷入重启循环,则表示状态与新的 Flink 版本不兼容,或者更新后的代码存在问题。查看Flink 2.2 升级的状态兼容性指南如何识别状态不兼容问题。
监控应用程序运行状况
应用程序状态:
应用程序状态应过渡:
RUNNING→UPDATING→RUNNING检查应用程序的运行时间。如果是 2.2,则表示升级操作成功。
如果您的应用程序已进入
RUNNING但仍使用较旧的运行时,则会启动自动回滚。操作 API 会将操作显示为FAILED。检查日志以查找失败的异常。
此外,还可以在以下位置监控这些指标 CloudWatch:
重启指标:
numRestarts:监控意外重启 — 如果为零且uptime或numRestarts正在增加,runningTime则升级成功。
检查点指标:
lastCheckpointDuration: 应类似于升级前的值numberOfFailedCheckpoints: 应保持在 0
第 6 阶段:验证应用程序行为
在 Flink 2.2 上运行应用程序之后:
功能验证
验证是否正在从源读取数据
验证数据是否正在写入接收器
验证业务逻辑是否产生预期结果
将输出与升级前的基准进行比较
性能验证
监控延迟指标(端到端处理时间)
监控吞吐量指标(每秒记录数)
监控检查点持续时间和大小
监控内存和 CPU 利用率
运行 24 小时以上
允许应用程序在生产环境中运行至少 24 小时,以确保:
没有内存泄漏
稳定的检查点行为
不会出现意外重启
一致的吞吐量
第 7 阶段:回滚程序
如果升级失败或应用程序正在运行但运行状况不佳,请回滚到以前的版本。
自动回滚
如果启用了自动回滚并且在启动期间升级失败,则 Amazon Apache Flink 托管服务会自动恢复到以前的版本。
手动回滚
如果应用程序正在运行但运行状况不佳,请使用 RollbackApplication API:
Amazon Web Services 管理控制台:
导航到您的应用程序
选择操作 → 回滚
确认回滚
Amazon CLI:
aws kinesisanalyticsv2 rollback-application \ --application-name MyApplication \ --current-application-version-id <version-id>
回滚期间会发生什么:
应用程序停止
运行时恢复到之前的 Flink 版本
应用程序代码恢复到以前的 JAR
应用程序从升级前最后一次成功拍摄的快照重新启动
重要
你无法在 Flink 1.x 上恢复 Flink 2.2 快照
回滚使用升级前拍摄的快照
升级前请务必拍摄快照(第 3 阶段)
后续步骤
升级期间如有疑问或问题,请参阅Managed Service for Apache Flink 的故障排除或联系 Supp Amazon ort。