我将Flink 1.10.1和FsStateBackend用作检查点的状态后端。我有一些有状态操作,这些操作在应用程序运行期间(以.jar应用程序而不是作为群集运行)可以按预期运行,但是如果应用程序由于某种原因停止(或崩溃),则应使用检查点没有被加载,函数没有任何先前的引用,那么我需要从数据库中加载信息并将其另存为状态,以再次使用这些先前的状态。必须有一种使用检查点和FsStateBackend来执行此操作的方法,而不必从数据库中读取所有信息,只需从已存储的检查点重新加载此状态即可。这可能吗?
这是一些代码: 我的检查点配置
$mail->msgHTML(file_get_contents('/emails/emailcontent.html'), __DIR__);
这是我要避免的示例:
final StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment(8, GetConfiguration.getConfig());
final StateBackend stateBackend = new FsStateBackend(new Path("/some/path/checkpoints").toUri(), true);
env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(5000);
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
env.enableCheckpointing(30000, CheckpointingMode.EXACTLY_ONCE);
env.getCheckpointConfig().setCheckpointTimeout(60000);
env.getCheckpointConfig().setTolerableCheckpointFailureNumber(10);
env.getCheckpointConfig().setPreferCheckpointForRecovery(true);
env.setRestartStrategy(RestartStrategies.noRestart());
env.setStateBackend(stateBackend);
希望我能为您解释自己,以了解我需要做什么。 亲切的问候! 预先感谢。
答案 0 :(得分:0)
要在重新启动作业时加载检查点的状态,必须明确安排这种情况的发生,否则将在不加载检查点的情况下重新运行该作业。
有关详细信息,请参见Restore from a savepoint和Resuming from a retained checkpoint,但是要点是:
bin/flink run -s :checkpointPath [:runArgs]
我的猜测是这还没有完成。
关于如何配置Flink群集以进行自动恢复的最佳实践,这取决于您使用的内容(纱线,Mesos,Kubernetes等)。