如何通过ui和一些后端状态问题在flink中更新作业而不丢失状态

w41d8nur  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(399)

我有以下代码:

val stateUri = "file:///tmp/"

new RocksDBStateBackend(stateUri, true)

当我通过ui部署新版本的作业时,我应该做些什么来保持状态?
将stateuri放入保存点路径就足够了吗?
如果我想扩展它,我可以用相同的路径再次部署相同的jar吗?
如果两个不同的jar具有相同的后端stateuri会发生什么?

dzjeubhm

dzjeubhm1#

为了升级您的工作,您首先应该通过 bin/flink savepoint <JOB_ID> <TARGET_DIRECTORY> . 或者,也可以使用保存点取消作业,该保存点创建保存点并停止作业 bin/flink cancel --withSavepoint <TARGET_DIRECTORY> <JOB_ID> . 两个cli调用都将返回一个指向创建的保存点的路径,该保存点应存储在 TARGET_DIRECTORY . 要从此保存点恢复,应在ui的保存点路径字段中输入此路径,或通过提交作业 bin/flink run --fromSavepoint <SAVEPOINT_PATH> <JAR> .
不,那个 stateUri 只是状态后端存储检查点的基本路径。状态后端将创建一个子目录,其中包含作业的id,它将在该子目录下存储检查点。因此,检查点的路径通常看起来像 stateUri/JOB_ID/chk-1 哪里 JOB_ID 是uuid(例如。 0ba86fd9d1b29d90796e4a7d27f9b2f9 )第一个检查站。
为了扩展作业,您应该获取一个保存点,取消作业,然后从保存点重新提交作业,并增加并行性(例如。 bin/flink run --fromSavepoint <SAVEPOINT_PATH> --parallelism 10 <JAR> ).
每个作业都有一个唯一的作业id。因此,您将在下面找到两个子目录 stateUri 哪些是不同的作业ID。检查点将分别存储在每个作业的每个子目录中。

相关问题