我知道stackoverflow上也有类似的问题,但在调查了其中几个问题后,我知道
-
手动触发
savepoint
,而触发checkpoint
自动 -
他们使用不同的存储格式
但这些并不是令人困惑的地方,我不知道何时使用其中一个或何时使用另一个。
考虑以下两种情况:
- 如果由于某种原因(例如错误修复或意外崩溃),我需要关闭或重新启动整个应用程序,那么我将不得不使用
savepoint
来恢复整个应用程序 - 我认为
checkpoint
只在Flink内部用于应用程序运行时的容错,即应用程序本身正在运行,但任务或其他事情可能会失败,即Flink将使用checkpoint
进行状态恢复 - 还有
externalized checkpoint
,我觉得它和savepoint
在功能上是一样的,就是externalized checkpoint
也可以用来从重新启动的应用程序中恢复
Flink是否使用检查点进行状态恢复?
基本上你是对的。正如您所说,检查点通常在Flink内部用于容错,它更像是框架中的一个概念。当应用程序失败时,程序将尝试从最新的检查点重新启动。这就是Flink中检查点的工作方式,没有任何人为干扰。
我应该使用保存点来恢复整个应用程序以修复错误吗?
是。在这些情况下,您不希望从检查点恢复,因为最近的检查点可能发生在几分钟前。相反,您希望快照整个应用程序的当前状态,并从最新的保存点重新启动它,这可能是恢复应用程序的最快方法,不会有太多延迟。
外部化检查点。
它仍然是检查点,但将根据您的配置从外部持久化。它可以用于恢复应用程序,但状态不是实时的,因为检查点之间存在间隔。
有关更多信息,请查看以下博客文章:https://data-artisans.com/blog/differences-between-savepoints-and-checkpoints-in-flink.