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