スナップショットを使用してアプリケーションバックアップを管理する - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink (Amazon MSF) は、以前は Amazon Kinesis Data Analytics for Apache Flink と呼ばれていました。

スナップショットを使用してアプリケーションバックアップを管理する

スナップショットは、Apache Flink セーブポイントの Managed Service for Apache Flink 実装です。スナップショットは、ユーザーまたはサービスによってトリガーされ、作成され、管理されるアプリケーション状態のバックアップです。Apache Flink セーブポイントについては、「Apache Flink ドキュメント」の「Savepoints」を参照してください。スナップショットを使用すると、アプリケーション状態の特定のスナップショットからアプリケーションを再起動できます。

注記

アプリケーションが正しい状態データで正しく再起動できるように、1 日に数回スナップショットを作成することをおすすめします。スナップショットの正しい頻度は、アプリケーションのビジネスロジックによって異なります。頻繁にスナップショットを作成すると、より新しいデータを復元できますが、コストが増加して必要なシステムリソースが増えます。

Apache Flink 用 Managed Serviceでは、次の API アクションを使用してスナップショットを管理します。

アプリケーションごとのスナップショット数の制限については、Managed Service for Apache Flink および Studio ノートブッククォータ を参照してください。アプリケーションがスナップショットの上限に達すると、スナップショットを手動で作成すると失敗し、「LimitExceededException」が表示されます。

Apache Flink 用 Managed Serviceは決してスナップショットを削除しません。これらのスナップショットは、 DeleteApplicationSnapshot アクションを使用して手動で削除する必要があります。

アプリケーションの起動時に、保存されているアプリケーション状態のスナップショットを読み込むには、「StartApplication」または「UpdateApplication」アクションの「ApplicationRestoreConfiguration」パラメータを使用します。

自動スナップショットの作成を管理する

アプリケーションの「ApplicationSnapshotConfiguration」で SnapshotsEnabledtrue に設定されている場合、Apache Flink 用 Managed Serviceは、アプリケーションが更新、スケーリング、または停止されたときに、1 回限りの処理セマンティクスを実現するために自動的にスナップショットを作成して使用します。

注記

ApplicationSnapshotConfiguration::SnapshotsEnabledfalse に設定されると、アプリケーションの更新中にデータが失われます。

注記

Apache Flink 用 Managed Serviceは、スナップショット作成中に中間セーブポイントをトリガーします。Flink バージョン 1.15 以降では、中間セーブポイントによる副作用は発生しなくなりました。「Triggering Savepoints」を参照してください。

自動的に作成されたスナップショットには以下の特性があります。

  • スナップショットはサービスによって管理されますが、「ListApplicationSnapshots」アクションを使用してスナップショットを表示できます。自動的に作成されたスナップショットは、スナップショットの制限に含まれます。

  • アプリケーションがスナップショットの制限を超えると、手動で作成したスナップショットは失敗しますが、Apache Flink 用 Managed Service サービスは、アプリケーションの更新、スケーリング、または停止時に引き続き正常にスナップショットを作成します。手動でさらにスナップショットを作成する前に、「 DeleteApplicationSnapshot」アクションを使用してスナップショットを手動で削除する必要があります。

互換性のない状態データを含むスナップショットから復元する

スナップショットにはオペレータに関する情報が含まれているため、以前のアプリケーションバージョン以降に変更されたオペレータの状態データをスナップショットから復元すると、予期しない結果が生じることがあります。現在のオペレータに対応していないスナップショットから状態データを復元しようとすると、アプリケーションに障害が発生します。障害が発生したアプリケーションは、「STOPPING」または「UPDATING」のいずれかの状態のままになります。

互換性のない状態データを含むスナップショットからアプリケーションが復元できるようにするには、「UpdateApplication」アクションを使用して「FlinkRunConfiguration」の AllowNonRestoredState パラメータを true に設定します。

古いスナップショットからアプリケーションを復元すると、次のような動作になります。

  • オペレータ追加:」新しいオペレータが追加されても、セーブポイントには新しいオペレータの状態データはありません。障害は発生せず、「AllowNonRestoredState」を設定する必要はありません。

  • オペレータが削除された:」既存のオペレータが削除されると、そのオペレータの状態データがセーブポイントに格納されます。AllowNonRestoredStatetrue に設定されていないと障害が発生します。

  • オペレータ修正:」パラメータのタイプを互換性のあるタイプに変更するなど、互換性のある変更が行われた場合、アプリケーションは古いスナップショットから復元できます。スナップショットからの復元の詳細については、「Apache Flink ドキュメント」の「Savepoints」を参照してください。Apache Flink バージョン 1.8 以降を使用するアプリケーションは、別のスキーマのスナップショットから復元できる可能性があります。Apache Flink バージョン 1.6 を使用するアプリケーションは復元できません。2 フェーズコミットシンクでは、ユーザーが作成したスナップショット (CreateApplicationSnapshot) の代わりにシステムスナップショット (SwS) を使用することをお勧めします。

    Flink の場合、Apache Flink 用 Managed Serviceは、スナップショットの作成中に中間セーブポイントをトリガーします。Flink 1.15 以降では、中間セーブポイントによる副作用は発生しなくなりました。「セーブポイントのトリガー」を参照してください。

既存のセーブポイントデータと互換性のないアプリケーションを再開する必要がある場合は、「StartApplication」アクションの「ApplicationRestoreType」パラメータを「SKIP_RESTORE_FROM_SNAPSHOT」に設定して、スナップショットからの復元をスキップすることをお勧めします。

Apache Flink が互換性のない状態データを処理する方法の詳細については、「Apache Flink ドキュメント」の「State Schema Evolution」を参照してください。

スナップショット API の例を確認する

このセクションには、アプリケーションでスナップショットを使用するための API アクションのリクエスト例が含まれています。JSON ファイルを API アクションの入力に使用する方法の詳細については、Managed Service for Apache Flink API コードの例 を参照してください。

アプリケーションのスナップショットを有効にする

UpdateApplication アクションの以下のリクエスト例は、アプリケーションのスナップショットを有効にします。

{ "ApplicationName": "MyApplication", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationSnapshotConfigurationUpdate": { "SnapshotsEnabledUpdate": "true" } } }

スナップショットを作成する

以下の「CreateApplicationSnapshot」アクションのリクエスト例では、現在のアプリケーション状態のスナップショットを作成します。

{ "ApplicationName": "MyApplication", "SnapshotName": "MyCustomSnapshot" }

アプリケーションのスナップショットを一覧表示する

以下の「ListApplicationSnapshots」アクションリクエスト例では、現在のアプリケーション状態の最初の 50 個のスナップショットが一覧表示されます。

{ "ApplicationName": "MyApplication", "Limit": 50 }

アプリケーションのスナップショットの詳細を一覧表示する

DescribeApplicationSnapshot アクションの以下のリクエスト例では、特定のアプリケーションスナップショットの詳細を一覧表示します。

{ "ApplicationName": "MyApplication", "SnapshotName": "MyCustomSnapshot" }

スナップショットの削除

以下の「DeleteApplicationSnapshot」アクションリクエスト例では、以前に保存したスナップショットを削除します。SnapshotCreationTimestamp 値は、「ListApplicationSnapshots」または「DeleteApplicationSnapshot」を使用して取得できます。

{ "ApplicationName": "MyApplication", "SnapshotName": "MyCustomSnapshot", "SnapshotCreationTimestamp": 12345678901.0, }

名前付きスナップショットを使用したアプリケーションを再起動する

以下の「StartApplication」アクションリクエスト例では、特定のスナップショットから保存された状態を使用してアプリケーションを起動します。

{ "ApplicationName": "MyApplication", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_CUSTOM_SNAPSHOT", "SnapshotName": "MyCustomSnapshot" } } }

最新のスナップショットを使用してアプリケーションを再起動する

以下の「StartApplication」アクションリクエスト例では、最新のスナップショットを使用してアプリケーションを起動します。

{ "ApplicationName": "MyApplication", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }

スナップショットなしでアプリケーションを再起動する

以下の「StartApplication」アクションのリクエスト例では、スナップショットがあってもアプリケーションの状態をロードせずにアプリケーションを起動します。

{ "ApplicationName": "MyApplication", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "SKIP_RESTORE_FROM_SNAPSHOT" } } }