如何通过flink更新工作而不通过UI和一些后端状态问题失去状态

时间:2019-01-09 06:11:55

标签: apache-flink flink-streaming

我有以下代码:

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

new RocksDBStateBackend(stateUri, true)
  1. 当我通过ui部署工作的新版本时,应该怎么做才能保持状态?
  2. 将stateUri放入保存点路径是否足够?
  3. 如果要向外扩展,是否可以使用相同的路径再次部署相同的jar?
  4. 如果两个不同的jar具有相同的后端stateUri,将会发生什么?

1 个答案:

答案 0 :(得分:1)

  1. 为了升级您的工作,您首先应该通过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>提交作业。
  2. 否,stateUri只是状态后端存储检查点的基本路径。状态后端将创建一个带有作业ID的子目录,在该目录下将存储检查点。因此,检查点的路径通常看起来像stateUri/JOB_ID/chk-1,其中JOB_ID是第一个检查点的UUID(例如0ba86fd9d1b29d90796e4a7d27f9b2f9)。
  3. 为了扩展作业,您应该获取一个保存点,取消该作业,然后重新提交从该保存点恢复的作业,并提高并行性(例如bin/flink run --fromSavepoint <SAVEPOINT_PATH> --parallelism 10 <JAR>)。
  4. 每个作业都有唯一的作业ID。因此,您将在stateUri下找到两个子目录,它们是不同的作业ID。检查点将分别存储在每个作业的每个子目录中。