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

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

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

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

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

注記

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

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

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

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

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

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

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

注記

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

注記

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

このセクションでは、アプリケーションでスナップショットを使用するAPIアクションのリクエスト例を示します。API アクションの入力にJSONファイルを使用する方法については、「」を参照してください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" } } }