Flink 2.2 へのアップグレード: 完全なガイド - Managed Service for Apache Flink

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Flink 2.2 へのアップグレード: 完全なガイド

このガイドでは、Amazon Managed Service for Apache Flink アプリケーションを Flink 1.x から Flink 2.2 にアップグレードするstep-by-stepについて説明します。これは、慎重な計画とテストを必要とする重大な変更を伴うメジャーバージョンアップグレードです。

メジャーバージョンのアップグレードは一方向です

アップグレードオペレーションでは、状態を保存してアプリケーションを Flink 1.x から 2.2 に移動できますが、2.2 状態を使用して 2.2 から 1.x に戻すことはできません。アップグレード後にアプリケーションが異常になった場合は、Rollback API を使用して、最新のスナップショットから元の 1.x 状態の 1.x バージョンに戻ります。

前提条件

アップグレードを開始する前に:

移行パスについて

アップグレードエクスペリエンスは、アプリケーションの Flink 2.2 との互換性によって異なります。これらのパスを理解することは、適切に準備し、現実的な期待を設定するのに役立ちます。

パス 1: 互換性のあるバイナリとアプリケーションの状態

予想されること:

  • アップグレードオペレーションを呼び出す

  • アプリケーションステータスが遷移した状態で 2.2 への移行を完了します。 RUNNINGUPDATINGRUNNING

  • データ損失や再処理なしですべてのアプリケーション状態を保持する

  • マイナーバージョン移行と同じエクスペリエンス

最適: ステートレスアプリケーションまたは互換性のあるシリアル化を使用するアプリケーション (Avro、互換性のある Protobuf スキーマ、コレクションのない POJOs)

パス 2: バイナリ非互換性

予想されること:

  • アップグレードオペレーションを呼び出す

  • オペレーションが失敗し、オペレーション API とログを通じてバイナリの非互換性が表示されます。

  • 自動ロールバックが有効になっている場合: アプリケーションは介入なしで数分以内に自動的にロールバックされます

  • 自動ロールバックが無効の場合: アプリケーションはデータ処理なしで実行状態のままになります。手動で古いバージョンにロールバックします。

  • バイナリが修正されたら、UpdateApplication API を使用して、パス 1 のようなエクスペリエンスを実現します。

最適: Flink ジョブの起動中に検出された削除APIs を使用するアプリケーション

パス 3: 互換性のないアプリケーションの状態

予想されること:

  • アップグレードオペレーションを呼び出す

  • 移行が最初に成功したように見える

  • 状態復元が失敗すると、アプリケーションは数秒以内に再起動ループに入る

  • 継続的な再起動を示す CloudWatch メトリクスによる障害の検出

  • ロールバックオペレーションを手動で呼び出す

  • ロールバックを開始してから数分以内に本番環境に戻る

  • アプリケーションの 状態移行を確認する

最適: 状態シリアル化の非互換性を持つアプリケーション (コレクションを持つ POJOs、特定の Kryo シリアル化状態)

注記

本番稼働用アプリケーションのレプリカを作成し、本番稼働用アプリケーションと同じステップを実行する前に、レプリカでアップグレードの以下の各フェーズをテストすることを強くお勧めします。

フェーズ 1: 準備

アプリケーションコードを更新する

Flink 2.2 と互換性があるようにアプリケーションコードを更新します。

  • pom.xml または で Flink の依存関係をバージョン 2.2.0 に更新する build.gradle

  • コネクタの依存関係を Flink 2.2 互換バージョンに更新する (「」を参照コネクタの可用性)

  • 非推奨の API の使用を削除します

    • DataSet API を DataStream API または Table API/SQL に置き換える

    • レガシー SourceFunction/SinkFunction を FLIP-27 ソースおよび FLIP-143 シンク APIs

    • Scala API の使用を Java 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. 設定の選択

  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. 作成を選択します。

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 をポイントします。

  • update-application アクションを使用します AWS CLI

  • を使用します CloudFormation。

    • RuntimeEnvironment フィールドを更新します。以前は、 CloudFormation がアプリケーションを削除して新しいアプリケーションを作成していたため、スナップショットやその他のアプリケーション履歴は失われていました。これで、 が所定のRuntimeEnvironment位置に CloudFormation 更新され、アプリケーションは削除されません。

  • AWS SDK を使用します。

    • 選択したプログラミング言語については、SDK のドキュメントを参照してください。「UpdateApplication」を参照してください。

アップグレードは、アプリケーションが RUNNING 状態のとき、またはアプリケーションが READY 状態で停止しているときに実行できます。Amazon Managed Service for Apache Flink は、元のランタイムバージョンとターゲットランタイムバージョンの互換性を検証します。この互換性チェックは、 RUNNING 状態UpdateApplication中に を実行したとき、または 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: アップグレードをモニタリングする

互換性チェック

  • Operations API を使用して、アップグレードのステータスを確認します。ジョブの起動時にバイナリの非互換性や問題がある場合、アップグレードオペレーションは ログで失敗します。

  • アップグレードオペレーションは成功したが、アプリケーションが再起動ループで停止している場合、状態が新しい Flink バージョンと互換性がないか、更新されたコードに問題があることを意味します。状態の非互換性の問題を特定する方法Flink 2.2 アップグレードのステート互換性ガイドを確認します。

アプリケーションのヘルスをモニタリングする

アプリケーションの状態:

  • アプリケーションステータスが遷移するはずです: RUNNINGUPDATINGRUNNING

  • アプリケーションのランタイムを確認します。2.2 の場合、アップグレードオペレーションは成功しました。

  • アプリケーションが にあるRUNNINGが、まだ古いランタイムにある場合、自動ロールバックが開始されました。Operations API はオペレーションを と表示しますFAILED。ログをチェックして、失敗の例外を見つけます。

さらに、CloudWatch でこれらのメトリクスをモニタリングします。

再起動メトリクス:

  • numRestarts: 予期しない再起動をモニタリングする — numRestartsがゼロで、 uptimeまたは が増加している場合、アップグレードrunningTimeは成功します。

チェックポイントメトリクス:

  • lastCheckpointDuration: アップグレード前の値と似ている必要があります

  • numberOfFailedCheckpoints: 0 のままにする必要があります

フェーズ 6: アプリケーションの動作を検証する

アプリケーションが Flink 2.2 で実行された後:

機能検証

  • ソースからデータが読み取られていることを確認する

  • シンクにデータが書き込まれていることを確認する

  • ビジネスロジックが期待される結果を生成することを確認する

  • 出力をアップグレード前のベースラインと比較する

パフォーマンス検証

  • レイテンシーメトリクスのモニタリング (end-to-endの処理時間)

  • スループットメトリクスのモニタリング (1 秒あたりのレコード数)

  • チェックポイントの期間とサイズをモニタリングする

  • メモリと 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 サポートにお問い合わせください。