使用本地执行环境如独立应用程序对保存点进行Flink

问题描述

如何使用独立应用程序(本地执行环境或小型集群)实现flink保存点。 我在flink-config.yaml文件中配置了保存点目录,但不确定在关闭应用程序之前如何获取保存点以及如何通过重新启动应用程序进行恢复?

有什么方法或必须使用flink群集然后再使用CLI。

感谢您的帮助。谢谢

解决方法

您可以使用CLI或REST API来触发保存点。

https://ci.apache.org/projects/flink/flink-docs-stable/ops/cli.html#savepoints

例如,在保持作业运行时触发保存点:

./bin/flink savepoint <jobId> [savepointDirectory]

或在停止作业时保存一个点:

./bin/flink stop [-p targetDirectory] [-d] <jobID>

要在重新启动期间从保存点恢复状态,请执行以下操作:

./bin/flink run -s <savepointPath> ...

有关此主题和相关主题的教程,请参见https://ci.apache.org/projects/flink/flink-docs-stable/try-flink/flink-operations-playground.html#upgrading--rescaling-a-job

此处记录了REST API:https://ci.apache.org/projects/flink/flink-docs-stable/monitoring/rest_api.html。例如,您可以通过

获取保存点
curl -X POST localhost:8001/jobs/:jobid/savepoints -d '{"cancel-job": false}'

如果要使用REST API来触发保存点而不运行集群,则可以在工作中执行此操作,以使用WebUI和REST API启动本地集群(在单个JVM中):

Configuration conf = new Configuration();
conf.setString("state.savepoints.dir","file:///tmp/savepoints");
StreamExecutionEnvironment env =
  StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(conf);

这些是使用开源Flink做到这一点的唯一方法。有一些商业产品(例如Ververica Platform的免费社区版)使这一过程变得更加容易。