使用快照管理应用程序备份 - Amazon Kinesis Data Analytics
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用快照管理应用程序备份

快照 是 Apache Flink 保存点 的 Kinesis Data Analytics 实施形式。快照是用户或服务触发、创建和管理的应用程序状态备份。有关 Apache Flink 保存点的信息,请参阅 Apache Flink 文档中的保存点。通过使用快照,您可以从特定的应用程序状态快照中重新启动应用程序。

注意

为了使用正确的状态数据正确地重新启动应用程序,我们建议应用程序每 5-10 分钟创建一个快照。

在 Kinesis Data Analytics for Java Applications 中,您可以使用以下API 操作管理快照:

有关每个应用程序的快照数限制,请参阅限制。如果应用程序达到快照限制,创建快照将失败并出现 LimitExceededException

Kinesis Data Analytics 从不删除用户创建的快照。您必须使用 DeleteApplicationSnapshot 操作手动删除快照。

要在启动应用程序时加载保存的应用程序状态快照,请使用 StartApplicationUpdateApplication 操作的 ApplicationRestoreConfiguration 参数。

自动创建快照

如果在应用程序的 ApplicationSnapshotConfiguration 中将 SnapshotsEnabled 设置为 true,Kinesis Data Analytics 在更新、扩展或停止应用程序时自动创建并使用快照以提供恰好一次处理语义。

注意

如果将 ApplicationSnapshotConfiguration::SnapshotsEnabled 设置为 false,将导致在应用程序更新期间丢失数据。

自动创建的快照具有以下特性:

  • 这种快照由该服务进行管理,不向用户公开,并且不会计入您的快照限制。

  • 仅自动保留一个这种快照。

从包含不兼容状态数据的快照中还原

由于快照包含有关操作符的信息,因此,如果从自上一应用程序版本以来发生变化的操作符的快照中还原状态数据,则可能会出现意外的结果。如果尝试从与当前操作符不对应的快照中还原状态数据,应用程序将会发生故障。发生故障的应用程序将停滞在 STOPPINGUPDATING 状态。

要允许应用程序从包含不兼容状态数据的快照中还原,请使用 UpdateApplication 操作将 FlinkRunConfigurationAllowNonRestoredState 参数设置为 true

从过时的快照中还原应用程序时,您将会看到以下行为:

  • 添加了操作符:如果添加了新操作符,则保存点没有新操作符的状态数据。不会发生故障,也不需要设置 AllowNonRestoredState

  • 删除了操作符:如果删除了现有操作符,则保存点具有丢失的操作符的状态数据。除非 AllowNonRestoredState 设置为 true,否则,将会发生故障。

  • 修改了操作符:如果进行了兼容的更改,例如将参数的类型更改为兼容的类型,则应用程序可以从过时的快照中还原。有关从快照中还原的更多信息,请参阅 Apache Flink 文档中的保存点。可以从具有不同架构的快照中还原使用 Apache Flink 版本 1.8 的应用程序。无法还原使用 Apache Flink 版本 1.6 的应用程序。

如果需要恢复与现有保存点数据不兼容的应用程序,我们建议您将 StartApplication 操作的 ApplicationRestoreType 参数设置为 SKIP_RESTORE_FROM_SNAPSHOT 以跳过从快照中还原的操作。

有关 Apache Flink 如何处理不兼容的状态数据的更多信息,请参阅 Apache Flink 文档中的状态架构演变

快照 API 示例

本节包含将快照与应用程序一起使用的 API 操作的示例请求。有关如何将 JSON 文件用于 API 操作输入的信息,请参阅 Kinesis Data Analytics 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 操作的以下示例请求删除以前保存的快照。您可以使用 ListApplicationSnapshotsDeleteApplicationSnapshot 获取 SnapshotCreationTimestamp 值:

{ "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" } } }