Apache flink Flink中保存点和检查点的区别

Apache flink Flink中保存点和检查点的区别,apache-flink,Apache Flink,我知道stackoverflow上也有类似的问题,但在调查了其中几个问题后,我知道了 保存点手动触发,而检查点被触发 自动地 它们使用不同的存储格式 但这些并不是令人困惑的地方,我不知道什么时候该用一个,什么时候该用另一个 考虑以下两种情况: 如果由于某种原因(例如错误修复或意外崩溃)需要关闭或重新启动整个应用程序,那么我必须使用savepoint来恢复整个应用程序 我认为,checkpoint仅在Flink内部用于应用程序运行时的容错,也就是说,应用程序本身正在运行,但任务或其他事情可能会失败

我知道stackoverflow上也有类似的问题,但在调查了其中几个问题后,我知道了

  • 保存点
    手动触发,而
    检查点
    被触发 自动地

  • 它们使用不同的存储格式

  • 但这些并不是令人困惑的地方,我不知道什么时候该用一个,什么时候该用另一个

    考虑以下两种情况:

  • 如果由于某种原因(例如错误修复或意外崩溃)需要关闭或重新启动整个应用程序,那么我必须使用
    savepoint
    来恢复整个应用程序
  • 我认为,
    checkpoint
    仅在Flink内部用于应用程序运行时的容错,也就是说,应用程序本身正在运行,但任务或其他事情可能会失败,也就是说,Flink将使用
    checkpoint
    进行状态恢复
  • 还有
    外部化检查点
    ,我认为这与
    保存点
    在功能上是一样的,也就是说,
    外部化检查点
    也可以用于从重新启动的应用程序恢复
  • Flink是否使用检查点进行状态恢复

    基本上你是对的。正如您所说,检查点通常在Flink内部用于容错,它更像是框架内的一个概念。当应用程序失败时,程序将尝试从最新的检查点重新启动。这就是检查站在弗林克的工作方式,没有任何人为的干扰

    我应该使用savepoint来恢复整个应用程序以修复bug吗

    对。在这些情况下,您不希望从检查点恢复,因为最近的检查点可能发生在几分钟前。相反,您希望快照整个应用程序的当前状态,并从最新的保存点重新启动它,这可能是恢复应用程序而不需要太多延迟的最快方法

    外部化检查点

    它仍然是检查点,但将根据您的配置在外部持久化。它可以用来恢复应用程序,但是状态不是那么实时,因为检查点之间存在间隔


    有关更多信息,请查看此博客文章:。

    感谢@bupt ljy提供的精彩答案。如果我的应用程序可能意外崩溃,因此我将无法及时获得手动准备保存点的机会,在这种情况下,看起来我别无选择,只能使用检查点?(正如您所说,可能会有一些延迟,因为检查点之间存在间隔).@bupt ljy,另一个相关但更直接的问题,检查点用于容错,
    用于容错
    是否包括整个应用程序意外崩溃的场景?@Tom很抱歉这么晚才回答。对于第一个问题,如果您的应用程序意外崩溃(已重试多次),外部化检查点是恢复它的唯一方法。对于第二个问题,它包括您启用外部化检查点后提到的情况,否则它只能处理一些需要重试的情况,如临时网络问题。