如何在不通过 UI 和一些后端状态问题丢失状态的情况下更新 flink 中的作业
How to update a job in flink without loosing the state via UI and some backend state questions
我有以下代码:
val stateUri = "file:///tmp/"
new RocksDBStateBackend(stateUri, true)
- 当我通过 ui 部署我的工作的新版本时,我应该怎么做才能保持状态?
- 将 stateUri 放在保存点路径中就足够了吗?
- 如果我想扩展它,我可以用相同的路径再次部署相同的 jar 吗?
- 如果两个不同的 jar 具有相同的后端 stateUri 会怎样?
- 为了升级你的工作,你首先应该通过
bin/flink savepoint <JOB_ID> <TARGET_DIRECTORY>
获取一个保存点。或者,您也可以使用创建保存点并停止作业的保存点取消作业 bin/flink cancel --withSavepoint <TARGET_DIRECTORY> <JOB_ID>
。两个 CLI 调用都将 return 一个指向创建的保存点的路径,该保存点应存储在您的 TARGET_DIRECTORY
下。为了从此保存点恢复,您应该将此路径输入 UI 中的 Savepoint Path 字段或通过 bin/flink run --fromSavepoint <SAVEPOINT_PATH> <JAR>
.[=27= 提交作业]
- 不,
stateUri
只是存储检查点的状态后端的基本路径。状态后端将创建一个子目录,其中包含将存储检查点的作业的 ID。因此,检查点的路径通常看起来像 stateUri/JOB_ID/chk-1
,其中 JOB_ID
是第一个检查点的 UUID(例如 0ba86fd9d1b29d90796e4a7d27f9b2f9
)。
- 为了扩展作业,您应该创建一个保存点,取消作业并重新提交从保存点恢复并增加并行度的作业(例如
bin/flink run --fromSavepoint <SAVEPOINT_PATH> --parallelism 10 <JAR>
)。
- 每个作业都有一个唯一的作业 ID。因此,您会在
stateUri
下找到两个子目录,它们是不同的作业ID。检查点将分别存储在每个作业的每个子目录中。
我有以下代码:
val stateUri = "file:///tmp/"
new RocksDBStateBackend(stateUri, true)
- 当我通过 ui 部署我的工作的新版本时,我应该怎么做才能保持状态?
- 将 stateUri 放在保存点路径中就足够了吗?
- 如果我想扩展它,我可以用相同的路径再次部署相同的 jar 吗?
- 如果两个不同的 jar 具有相同的后端 stateUri 会怎样?
- 为了升级你的工作,你首先应该通过
bin/flink savepoint <JOB_ID> <TARGET_DIRECTORY>
获取一个保存点。或者,您也可以使用创建保存点并停止作业的保存点取消作业bin/flink cancel --withSavepoint <TARGET_DIRECTORY> <JOB_ID>
。两个 CLI 调用都将 return 一个指向创建的保存点的路径,该保存点应存储在您的TARGET_DIRECTORY
下。为了从此保存点恢复,您应该将此路径输入 UI 中的 Savepoint Path 字段或通过bin/flink run --fromSavepoint <SAVEPOINT_PATH> <JAR>
.[=27= 提交作业] - 不,
stateUri
只是存储检查点的状态后端的基本路径。状态后端将创建一个子目录,其中包含将存储检查点的作业的 ID。因此,检查点的路径通常看起来像stateUri/JOB_ID/chk-1
,其中JOB_ID
是第一个检查点的 UUID(例如0ba86fd9d1b29d90796e4a7d27f9b2f9
)。 - 为了扩展作业,您应该创建一个保存点,取消作业并重新提交从保存点恢复并增加并行度的作业(例如
bin/flink run --fromSavepoint <SAVEPOINT_PATH> --parallelism 10 <JAR>
)。 - 每个作业都有一个唯一的作业 ID。因此,您会在
stateUri
下找到两个子目录,它们是不同的作业ID。检查点将分别存储在每个作业的每个子目录中。