Apache flink Apache Flink如何从检查点/保存点恢复状态?

Apache flink Apache Flink如何从检查点/保存点恢复状态?,apache-flink,stream-processing,Apache Flink,Stream Processing,我需要知道ApacheFlink是如何从检查点恢复其状态的,因为我看不到在运行纯作业和从保存点恢复时在操作符中启动和看到第一个事件的时间有什么区别 状态是否从检查点/保存点延迟加载 键控状态接口旨在使这种区别变得透明。正如Dawid提到的,状态是在作业启动期间加载的。请注意,加载状态的含义取决于正在使用的状态后端 在操作员状态下,CheckpointedFunction接口具有此方法 public void initializeState(FunctionInitializationContex

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


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

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

在操作员状态下,
CheckpointedFunction
接口具有此方法

public void initializeState(FunctionInitializationContext context)

其中,上下文有一个
isRestored()
方法,可让您知道是否正在从故障中恢复。有关更多详细信息,请参见,包括示例。

键控状态接口旨在使此区别透明。正如Dawid提到的,状态是在作业启动期间加载的。请注意,加载状态的含义取决于正在使用的状态后端

在操作员状态下,
CheckpointedFunction
接口具有此方法

public void initializeState(FunctionInitializationContext context)

其中,上下文有一个
isRestored()
方法,可让您知道是否正在从故障中恢复。有关更多详细信息,请参见,包括一个示例。

您能详细介绍一下您的用例吗?通常情况下,状态是在作业开始时使用保存点加载的。@DawidWysakowicz是在启动时从保存点加载所有状态,还是根据需要加载状态(延迟加载)?正如@alpinegzmo所说,这取决于所选的状态后端。RocksDB始终以字节为单位保存状态,并在访问时进行序列化/反序列化。HeapStateBackend在作业开始时反序列化。@DawidWysakowicz文件系统如何?您能详细介绍一下您的用例吗?通常情况下,状态是在作业开始时使用保存点加载的。@DawidWysakowicz是在启动时从保存点加载所有状态,还是根据需要加载状态(延迟加载)?正如@alpinegzmo所说,这取决于所选的状态后端。RocksDB始终以字节为单位保存状态,并在访问时进行序列化/反序列化。HeapStateBackend在作业开始时反序列化。@DawidWysakowicz文件系统如何?键控状态如何?它们在第一个键到达或未到达时缓慢加载,Flink在开始时加载所有键,然后流开始?这取决于;这是每个状态后端的实现细节。根据我对它们工作原理的了解,我猜测基于堆的状态后端会在作业重新启动期间将所有状态加载到内存中,RocksDB状态后端会将状态从检查点复制到其工作集中(即从分布式文件系统复制到本地文件系统)。您的用例中有什么让您关心这个细节?您是否关心重启期间的停机时间?嗨@DavidAnderson:如果重启期间的停机时间是一个问题呢?有没有办法使用RocksDB启用延迟加载?(根据当前密钥查询HDFS,然后在本地缓存该条目以备将来更新)设置密钥的状态如何?它们在第一个键到达或未到达时缓慢加载,Flink在开始时加载所有键,然后流开始?这取决于;这是每个状态后端的实现细节。根据我对它们工作原理的了解,我猜测基于堆的状态后端会在作业重新启动期间将所有状态加载到内存中,RocksDB状态后端会将状态从检查点复制到其工作集中(即从分布式文件系统复制到本地文件系统)。您的用例中有什么让您关心这个细节?您是否关心重启期间的停机时间?嗨@DavidAnderson:如果重启期间的停机时间是一个问题呢?有没有办法使用RocksDB启用延迟加载?(根据当前密钥查询HDFS,然后在本地缓存该条目以备将来更新)