翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 への移行を完了します。
RUNNING→UPDATING→RUNNINGデータ損失や再処理なしですべてのアプリケーション状態を保持する
マイナーバージョン移行と同じエクスペリエンス
最適: ステートレスアプリケーションまたは互換性のあるシリアル化を使用するアプリケーション (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 シンク APIsScala 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 マネジメントコンソール:
アプリケーションに移動する
設定の選択
アプリケーション設定で、システムのロールバックが有効になっていることを確認します。
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)作成を選択します。
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 アップグレードのステート互換性ガイドを確認します。
アプリケーションのヘルスをモニタリングする
アプリケーションの状態:
アプリケーションステータスが遷移するはずです:
RUNNING→UPDATING→RUNNINGアプリケーションのランタイムを確認します。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 マネジメントコンソール:
アプリケーションに移動する
アクションの選択 → ロールバック
ロールバックを確認する
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 サポートにお問い合わせください。