zoltar9264 commented on a change in pull request #19207:
URL: https://github.com/apache/flink/pull/19207#discussion_r833871458
##########
File path: docs/content.zh/docs/ops/state/savepoints.md
##########
@@ -157,10 +157,54 @@ $ bin/flink run -s :savepointPath [:runArgs]
默认情况下,resume 操作将尝试将 Savepoint 的所有状态映射回你要还原的程序。 如果删除了运算符,则可以通过
`--allowNonRestoredState`(short:`-n`)选项跳过无法映射到新程序的状态:
+#### Restore 模式
+
+`Restore 模式` 决定了在 restore 之后谁拥有组成 Savepoint 或者 [externalized checkpoint]({{<
ref "docs/ops/state/checkpoints"
>}}/#resuming-from-a-retained-checkpoint)的文件的所有权。在这种语境下 Savepoint 和
externalized checkpoint 的行为相似。这里我们将它们都称为“快照”,除非另有明确说明。
+
+如前所述,restore 模式决定了谁来接管我们从中恢复的快照文件的所有权。快照可被用户或者 Flink 自身拥有。如果快照归用户所有,Flink
不会删除其中的文件,而且 Flink 不能依赖该快照中文件的存在,因为它可能在 Flink 的控制之外被删除。
+
+每种 restore 模式都有特定的用途。尽管如此,我们仍然认为默认的 *NO_CLAIM*
模式在大多数情况下是一个很好的折中方案,因为它在提供明确的所有权归属的同时只给恢复后第一个 checkpoint 带来较小的代价。
+
+你可以通过如下方式指定 restore 模式:
```shell
-$ bin/flink run -s :savepointPath -n [:runArgs]
+$ bin/flink run -s :savepointPath -restoreMode :mode -n [:runArgs]
```
+**NO_CLAIM (默认的)**
+
+在 *NO_CLAIM* 模式下,Flink
不会接管快照的所有权。它会将快照的文件置于用户的控制之中,并且永远不会删除其中的任何文件。该模式下可以从同一个快照上启动多个作业。
+
+为保证 Flink 不会依赖于该快照的任何文件,它会强制第一个(成功的) checkpoint 为全量 checkpoint
而不是增量的。这仅对`state.backend: rocksdb` 有影响,因为其他 backend 总是制作全量 checkpoint。
+
+一旦第一个全量的 checkpoint 完成后,所有后续的 checkpoint 会照常制作(按照配置)。所以,一旦一个 checkpoint
成功制作,就可以删除原快照。在此之前不能删除原快照,因为没有任何完成的 checkpoint,Flink 会在故障时尝试从初始的快照恢复。
+
+<div style="text-align: center">
+ {{< img src="/fig/restore-mode-no_claim.svg" alt="NO_CLAIM restore mode"
width="70%" >}}
+</div>
+
+**CLAIM**
+
+另一个可选的模式是 *CLAIM* 模式。该模式下 Flink 将声称拥有快照的所有权,并且本质上将其作为 checkpoint
对待:控制其生命周期并且可能会在其永远不会被用于恢复的时候删除它。因此,手动删除快照和从同一个快照上启动两个作业都是不安全的。Flink
会保持[配置数量]({{< ref "docs/dev/datastream/fault-tolerance/checkpointing"
>}}/#state-checkpoints-num-retained)的 checkpoint。
+
+<div style="text-align: center">
+ {{< img src="/fig/restore-mode-claim.svg" alt="CLAIM restore mode"
width="70%" >}}
+</div>
+
+{{< hint info >}}
+**注意:**
+1. Retained checkpoints 被存储在 `<checkpoint_dir>/<job_id>/chk_<x>` 这样的目录中。Flink
不会接管 `<checkpoint_dir>/<job_id>` 目录的所有权,而只会接管 `chk_<x>` 的所有权。Flink 不会删除旧作业的目录。
Review comment:
Got it, and done. thanks.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]