代码之家  ›  专栏  ›  技术社区  ›  igx

如何在Flink中更新作业,而不通过UI失去状态以及一些后端状态问题

  •  1
  • igx  · 技术社区  · 6 年前

    我有以下代码:

    val stateUri = "file:///tmp/"
    
    new RocksDBStateBackend(stateUri, true)
    
    1. 当我通过UI部署新版本的工作时,我应该做什么来保持状态?
    2. 将stateuri放入保存点路径是否足够?
    3. 如果我想扩展它,我可以用相同的路径再次部署相同的JAR吗?
    4. 如果两个不同的jar具有相同的后端stateuri,会发生什么?
    1 回复  |  直到 6 年前
        1
  •  1
  •   Till Rohrmann    6 年前
    1. 为了升级您的作业,您首先应该通过 bin/flink savepoint <JOB_ID> <TARGET_DIRECTORY> . 或者,您也可以使用保存点取消作业,该保存点创建保存点并停止作业。 bin/flink cancel --withSavepoint <TARGET_DIRECTORY> <JOB_ID> . 两个CLI调用都将返回到创建的保存点的路径,该保存点应存储在 TARGET_DIRECTORY . 要从此保存点恢复,应将此路径输入 保存点路径 用户界面中的字段或通过提交作业 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。因此,您可以在下面找到两个子目录 斯塔内利 这是不同的作业ID。检查点将分别存储在每个作业的每个子目录中。