升級到 Flink 2.2:完成指南 - Managed Service for Apache Flink

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

升級到 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:RUNNINGUPDATINGRUNNING

  • 保留所有應用程式狀態,而不會遺失資料或進行重新處理

  • 與次要版本遷移相同的體驗

最適合:無狀態應用程式或使用相容序列化的應用程式 (Avro、相容的 Protobuf 結構描述、不含集合POJOs)

路徑 2:二進位不相容

預期事項:

  • 叫用升級操作

  • 操作失敗,並透過操作 API 和日誌顯示二進位不相容

  • 啟用自動轉返:應用程式會在幾分鐘內自動轉返,無需您的介入

  • 停用自動轉返:應用程式在未處理資料的情況下仍處於執行中狀態;您可以手動轉返至較舊的版本

  • 修正二進位檔案後,請使用 UpdateApplication API 來獲得類似路徑 1 的體驗

最適合:使用 Flink 任務啟動期間偵測到之已移除 APIs 的應用程式

路徑 3:不相容的應用程式狀態

預期事項:

  • 叫用升級操作

  • 遷移一開始似乎成功

  • 當狀態還原失敗時,應用程式會在幾秒鐘內進入重新啟動迴圈

  • 透過顯示持續重新啟動的 CloudWatch 指標偵測失敗

  • 手動叫用轉返操作

  • 啟動復原後幾分鐘內返回生產環境

  • 狀態遷移 檢閱您的應用程式

最適合:狀態序列化不相容的應用程式 (具有集合、特定 Kryo 序列化狀態的 POJOs)

注意

強烈建議您建立生產應用程式的複本,並在複本上測試下列每個升級階段,然後再遵循生產應用程式的相同步驟。

階段 1:準備

更新應用程式程式碼

更新您的應用程式程式碼,使其與 Flink 2.2 相容:

  • 在 或 中將 Flink 相依性更新至 2.2.0 版 pom.xml build.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 管理主控台:

  1. 導覽至您的應用程式

  2. 選擇 Configuration (組態)。

  3. 應用程式設定下,確認系統復原已啟用

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 管理主控台:

  1. 導覽至您的應用程式

  2. 選擇快照

  3. 選擇建立快照

  4. 輸入快照名稱 (例如 pre-flink-2.2-upgrade)

  5. 選擇 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 CLIupdate-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 升級的狀態相容性指南 檢閱如何識別狀態不相容問題。

監控應用程式運作狀態

應用程式狀態:

  • 應用程式狀態應轉換:RUNNINGUPDATINGRUNNING

  • 檢查應用程式的執行時間。如果是 2.2,表示升級操作成功。

  • 如果您的應用程式在 中,RUNNING但仍處於較舊的執行時間,則自動轉返會開始。操作 API 會將操作顯示為 FAILED。檢查日誌以尋找失敗的例外狀況。

此外,請在 CloudWatch 中監控這些指標:

重新啟動指標:

  • numRestarts:監控意外重新啟動 — 如果 numRestarts為零且 uptimerunningTime 正在增加,則升級成功。

檢查點指標:

  • lastCheckpointDuration:應該類似於預先升級的值

  • numberOfFailedCheckpoints:應保持在 0

階段 6:驗證應用程式行為

在 Flink 2.2 上執行應用程式之後:

功能驗證

  • 確認正在從來源讀取資料

  • 確認資料正在寫入目的地

  • 驗證業務邏輯產生預期結果

  • 比較輸出與升級前基準

效能驗證

  • 監控延遲指標 end-to-end處理時間)

  • 監控輸送量指標 (每秒記錄數)

  • 監控檢查點持續時間和大小

  • 監控記憶體和 CPU 使用率

執行 24 小時以上

允許應用程式在生產環境中執行至少 24 小時,以確保:

  • 沒有記憶體洩漏

  • 穩定檢查點行為

  • 沒有意外重新啟動

  • 一致的輸送量

階段 7:轉返程序

如果升級失敗或應用程式正在執行但運作狀態不佳,請復原至先前的版本。

自動轉返

如果啟用自動轉返,且在啟動期間升級失敗,Amazon Managed Service for Apache Flink 會自動還原至先前的版本。

手動轉返

如果應用程式正在執行但運作狀態不佳,請使用 RollbackApplication API:

AWS 管理主控台:

  1. 導覽至您的應用程式

  2. 選擇動作復原

  3. 確認轉返

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。