【问题标题】:How does Apache Flink restore state from checkpoint/savepoint?Apache Flink 如何从检查点/保存点恢复状态?
【发布时间】:2018-02-01 11:37:27
【问题描述】:

我需要知道 Apache Flink 如何从检查点恢复其状态,因为在运行纯作业与从保存点恢复时,我看不出启动时间和在操作员中看到第一个事件之间有什么区别。

状态是否从检查点/保存点延迟加载?

【问题讨论】:

  • 您能否详细说明一下您的用例?通常,状态会在作业开始时以保存点加载。
  • @DawidWysakowicz 是在启动时从保存点加载所有状态还是根据需要加载它们(延迟加载)?
  • 正如@alpinegizmo 所说,这取决于选择的状态后端。 RocksDB 始终以字节为单位保持状态,并在访问时进行序列化/反序列化。 HeapStateBackend 在作业开始时反序列化。
  • @DawidWysakowicz 文件系统呢?

标签: apache-flink stream-processing


【解决方案1】:

键控状态接口旨在使这种区别变得透明。正如 Dawid 所提到的,状态是在作业开始期间加载的。请注意,加载状态的含义取决于所使用的状态后端。

在操作符状态的情况下CheckpointedFunction接口有这个方法

public void initializeState(FunctionInitializationContext context)

上下文有一个isRestored() 方法,可以让您知道您是否正在从故障中恢复。请参阅docs on managed operator state 了解更多详细信息,包括示例。

【讨论】:

  • 键控状态怎么样?当第一个键到达它们时它们会延迟加载,Flink 在启动时加载所有它们然后流开始?
  • 视情况而定;这是每个状态后端的实现细节。根据我对它们工作方式的了解,我的猜测是基于堆的状态后端在作业重新启动期间将所有状态加载到内存中,而 RocksDB 状态后端将状态从检查点复制到其工作集(即从分布式文件系统到本地文件系统)。您的用例是什么让您关心这个细节——您是否担心重启期间的停机时间?
  • 嗨@DavidAnderson:如果重启期间的停机时间是一个问题怎么办?有没有办法使用 RocksDB 启用延迟加载? (根据当前键查询 HDFS,然后在本地缓存该条目以供将来更新)
猜你喜欢
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多