本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用快照管理应用程序备份
一个快照是 Apache Flink 的 Kinesis Data Analytics 实现保存点. 快照是用户或服务触发、创建和管理的应用程序状态备份。有关 Apache Flink 保存点的信息,请参阅保存点
我们建议应用程序每天创建几次快照以使用正确的状态数据正确地重新启动。快照的正确频率取决于应用程序的业务逻辑。通过频繁拍摄快照,您可以恢复更新的数据,但会增加成本并需要更多系统资源。
在 Kinesis Data Analytics 中,您可以使用以下 API 操作管理快照:
有关每个应用程序的快照数限制,请参阅配额。如果应用程序达到快照限制,则手动创建快照将失败并出现LimitExceededException
.
Kinesis Data Analytics 永远不会删除快照。您必须使用 DeleteApplicationSnapshot
操作手动删除快照。
要在启动应用程序时加载已保存的应用程序状态快照,请使用ApplicationRestoreConfiguration
的参数StartApplication
要么UpdateApplication
action.
本主题包含下列部分:
自动创建快照
如果SnapshotsEnabled
设置为true
中的 ApplicationSnapshot配置对于应用程序,Kinesis Data Analytics 会在应用程序更新、缩放或停止时自动创建和使用快照,以提供精确一次的处理语义。
如果将 ApplicationSnapshotConfiguration::SnapshotsEnabled
设置为 false
,将导致在应用程序更新期间丢失数据。
自动创建的快照具有以下特性:
-
快照由服务管理,但是您可以使用 ListApplication快照action. 自动创建的快照计入您的快照限制。
-
如果应用程序超出快照限制,手动创建的快照将失败,但是当应用程序更新、缩放或停止时,Kinesis Data Analytics 服务仍会成功创建快照。您必须使用手动删除快照 DeleteApplication快照手动创建更多快照之前的操作。
从包含不兼容状态数据的快照中还原
由于快照包含有关操作符的信息,因此,如果从自上一应用程序版本以来发生变化的操作符的快照中还原状态数据,则可能会出现意外的结果。如果尝试从与当前操作符不对应的快照中还原状态数据,应用程序将会发生故障。发生故障的应用程序将停滞在 STOPPING
或 UPDATING
状态。
要允许应用程序从包含不兼容状态数据的快照中还原,请将AllowNonRestoredState
的参数FlinkRun配置到true
使用UpdateApplicationaction.
从过时的快照中还原应用程序时,您将会看到以下行为:
添加了操作符:如果添加了新操作符,则保存点没有新操作符的状态数据。不会发生故障,也不需要设置
AllowNonRestoredState
。已删除操作员:如果删除了现有操作符,则保存点具有丢失的操作符的状态数据。除非
AllowNonRestoredState
设置为true
,否则,将会发生故障。操作员已修改:如果进行了兼容的更改,例如将参数的类型更改为兼容的类型,则应用程序可以从过时的快照中还原。有关从快照还原的更多信息,请参阅保存点
中的Apache Flink 文档. 可以从具有不同架构的快照中还原使用 Apache Flink 版本 1.8 或更高版本的应用程序。无法还原使用 Apache Flink 版本 1.6 的应用程序。
如果您需要恢复与现有存储点数据不兼容的应用程序,我们建议您通过设置ApplicationRestoreType
的参数StartApplication采取行动SKIP_RESTORE_FROM_SNAPSHOT
.
有关 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
操作的以下示例请求删除以前保存的快照。你可以获取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" } } }