本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
升級到 Flink 2.2:完成指南
本指南提供step-by-step說明。這是主要版本升級,其中包含需要仔細規劃和測試的重大變更。
主要版本升級是單向
升級操作可以使用狀態保留將您的應用程式從 Flink 1.x 移至 2.2,但您無法從 2.2 移至具有 2.2 狀態的 1.x。如果您的應用程式在升級後變得運作狀態不佳,請使用轉返 API,從最新的快照返回具有原始 1.x 狀態的 1.x 版本。
先決條件
開始升級之前:
檢閱 中斷變更和棄用
確保您擁有用於測試的非生產環境
記錄您目前的應用程式組態和相依性
了解遷移路徑
您的升級體驗取決於應用程式與 Flink 2.2 的相容性。了解這些路徑可協助您適當地準備並設定逼真的期望。
路徑 1:相容的二進位和應用程式狀態
預期事項:
叫用升級操作
使用應用程式狀態轉換完成遷移至 2.2:
RUNNING→UPDATING→RUNNING保留所有應用程式狀態,而不會遺失資料或進行重新處理
與次要版本遷移相同的體驗
最適合:無狀態應用程式或使用相容序列化的應用程式 (Avro、相容的 Protobuf 結構描述、不含集合POJOs)
路徑 2:二進位不相容
預期事項:
叫用升級操作
操作失敗,並透過操作 API 和日誌顯示二進位不相容
啟用自動轉返:應用程式會在幾分鐘內自動轉返,無需您的介入
停用自動轉返:應用程式在未處理資料的情況下仍處於執行中狀態;您可以手動轉返至較舊的版本
修正二進位檔案後,請使用 UpdateApplication API 來獲得類似路徑 1 的體驗
最適合:使用 Flink 任務啟動期間偵測到之已移除 APIs 的應用程式
路徑 3:不相容的應用程式狀態
預期事項:
叫用升級操作
遷移一開始似乎成功
當狀態還原失敗時,應用程式會在幾秒鐘內進入重新啟動迴圈
透過顯示持續重新啟動的 CloudWatch 指標偵測失敗
手動叫用轉返操作
啟動復原後幾分鐘內返回生產環境
狀態遷移 檢閱您的應用程式
最適合:狀態序列化不相容的應用程式 (具有集合、特定 Kryo 序列化狀態的 POJOs)
注意
強烈建議您建立生產應用程式的複本,並在複本上測試下列每個升級階段,然後再遵循生產應用程式的相同步驟。
階段 1:準備
更新應用程式程式碼
更新您的應用程式程式碼,使其與 Flink 2.2 相容:
在 或 中將 Flink 相依性更新至 2.2.0 版
pom.xmlbuild.gradle將連接器相依性更新至 Flink 2.2 相容版本 (請參閱 連接器可用性)
移除已棄用的 API 用量:
以 DataStream API 或資料表 API/SQL 取代 DataSet API DataStream
使用 FLIP-27 來源和 FLIP-143 接收器 APIs 取代舊版
SourceFunction/SinkFunction以 Java API 取代 Scala API 用量
更新至 Java 17
上傳更新的應用程式程式碼
使用 Flink 2.2 相依性建置您的應用程式 JAR
使用與目前 JAR 不同的檔案名稱上傳到 Amazon S3 (例如
my-app-flink-2.2.jar)請注意要在升級步驟中使用的 S3 儲存貯體和金鑰
階段 2:啟用自動轉返
自動轉返可讓 Amazon Managed Service for Apache Flink 在升級失敗時自動還原至先前的版本。
檢查自動轉返狀態
AWS 管理主控台:
導覽至您的應用程式
選擇 Configuration (組態)。
在應用程式設定下,確認系統復原已啟用
AWS 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:拍攝快照 (選用)
如果您的應用程式已啟用自動快照,您可以略過此步驟,否則請在升級之前擷取應用程式的快照以儲存應用程式的狀態。
從執行中的應用程式擷取快照
AWS 管理主控台:
導覽至您的應用程式
選擇快照
選擇建立快照
輸入快照名稱 (例如
pre-flink-2.2-upgrade)選擇 Create (建立)
AWS 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 變成 READY再繼續。
階段 4:升級應用程式
您可以使用 UpdateApplication動作升級 Flink 應用程式。
您可以透過多種方式呼叫 UpdateApplication API:
使用 AWS 管理主控台。
前往 上的應用程式頁面 AWS 管理主控台。
選擇設定。
選取您要從中開始的新執行期和快照,也稱為還原組態。使用最新的設定作為還原組態,從最新的快照啟動應用程式。指向 Amazon S3 上新升級的應用程式 JAR/zip。
使用 AWS CLI
update-application動作。 使用 CloudFormation。
更新
RuntimeEnvironment欄位。先前, CloudFormation 已刪除應用程式並建立新的應用程式,導致您的快照和其他應用程式歷史記錄遺失。現在會 CloudFormation 更新您的RuntimeEnvironment就地,不會刪除您的應用程式。
使用 AWS SDK。
如需您選擇的程式設計語言,請參閱 SDK 文件。請參閱
UpdateApplication。
您可以在應用程式處於 RUNNING 狀態或應用程式處於停止READY狀態時執行升級。Amazon Managed Service for Apache Flink 會驗證原始執行時間版本與目標執行時間版本之間的相容性。此相容性檢查會在處於 UpdateApplication RUNNING 狀態時執行,或在READY處於 狀態時升級StartApplication時於下一個執行。
從 RUNNING 狀態升級
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" } } } }'
從 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" } } } }'
階段 5:監控升級
相容性檢查
使用 操作 API 檢查升級的狀態。如果任務啟動有二進位不相容或問題,升級操作將使用 日誌失敗。
如果升級操作成功,但應用程式卡在重新啟動迴圈中,這表示狀態與新的 Flink 版本不相容,或更新的程式碼發生問題。Flink 2.2 升級的狀態相容性指南 檢閱如何識別狀態不相容問題。
監控應用程式運作狀態
應用程式狀態:
應用程式狀態應轉換:
RUNNING→UPDATING→RUNNING檢查應用程式的執行時間。如果是 2.2,表示升級操作成功。
如果您的應用程式在 中,
RUNNING但仍處於較舊的執行時間,則自動轉返會開始。操作 API 會將操作顯示為FAILED。檢查日誌以尋找失敗的例外狀況。
此外,請在 CloudWatch 中監控這些指標:
重新啟動指標:
numRestarts:監控意外重新啟動 — 如果numRestarts為零且uptime或runningTime正在增加,則升級成功。
檢查點指標:
lastCheckpointDuration:應該類似於預先升級的值numberOfFailedCheckpoints:應保持在 0
階段 6:驗證應用程式行為
在 Flink 2.2 上執行應用程式之後:
功能驗證
確認正在從來源讀取資料
確認資料正在寫入目的地
驗證業務邏輯產生預期結果
比較輸出與升級前基準
效能驗證
監控延遲指標 end-to-end處理時間)
監控輸送量指標 (每秒記錄數)
監控檢查點持續時間和大小
監控記憶體和 CPU 使用率
執行 24 小時以上
允許應用程式在生產環境中執行至少 24 小時,以確保:
沒有記憶體洩漏
穩定檢查點行為
沒有意外重新啟動
一致的輸送量
階段 7:轉返程序
如果升級失敗或應用程式正在執行但運作狀態不佳,請復原至先前的版本。
自動轉返
如果啟用自動轉返,且在啟動期間升級失敗,Amazon Managed Service for Apache Flink 會自動還原至先前的版本。
手動轉返
如果應用程式正在執行但運作狀態不佳,請使用 RollbackApplication API:
AWS 管理主控台:
導覽至您的應用程式
選擇動作 → 復原
確認轉返
AWS 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 故障診斷或聯絡 AWS Support。