zhuzhurk commented on code in PR #24263:
URL: https://github.com/apache/flink/pull/24263#discussion_r1477630748
##########
docs/content.zh/docs/ops/state/task_failure_recovery.md:
##########
@@ -294,7 +328,22 @@ env =
StreamExecutionEnvironment.get_execution_environment(config)
使用群集定义的重启策略。
这对于启用了 checkpoint 的流处理程序很有帮助。
-如果没有定义其他重启策略,默认选择固定延时重启策略。
+如果没有定义其他重启策略,默认选择指数延迟重启策略。
+
+### 默认重启策略
+
+当 Checkpoint 开启且用户没有指定重启策略时,[`指数延迟重启策略`]({{< ref
"docs/ops/state/task_failure_recovery" >}}#exponential-delay-restart-strategy)
+是当前默认的重启策略。我们强烈推荐 Flink 用户使用指数延迟重启策略并将其设置为默认重启策略,因为它相比其他重启策略可以做到:
+作业偶尔异常时可以快速重试,作业频繁异常时可以避免外部组件发生雪崩。因为:
+
+- 所有的重启策略在重启作业时都会延迟一定的时间来避免频繁重试对外部组件的产生较大压力。
+- 除了指数延迟重启策略以外的所有重启策略延迟时间都是固定的。
+ - 如果延迟时间设置的过短,当作业短时间内频繁异常时,会频繁重启访问外部组件的主节点,可能导致外部组件发生雪崩。
+ 例如:大量的 Flink 作业都在消费 Kafka,当 Kafka 集群出现故障时大量的 Flink 作业都在同一时间频繁重试,很可能导致雪崩。
+ - 如果延迟时间设置的过长,当作业偶尔失败时需要等待很久才会重试,从而导致作业可用率降低。
+- 指数延迟重启策略每次重试的延迟时间会指数递增,直到达到最大延迟时间。
Review Comment:
Maybe also mention the jitter mechanism which helps to avoid restarting jobs
at the same time?
##########
docs/content.zh/docs/ops/state/task_failure_recovery.md:
##########
@@ -199,6 +199,40 @@ Python API 不支持。
{{< /tab >}}
{{< /tabs >}}
+#### 示例
+
+以下是一个示例,用于解释指数延迟重启策略的工作原理。
+
+```yaml
+restart-strategy.exponential-delay.initial-backoff: 1 s
+restart-strategy.exponential-delay.backoff-multiplier: 2
+restart-strategy.exponential-delay.max-backoff: 10 s
+# 为了方便描述,这里关闭了 jitter
+restart-strategy.exponential-delay.jitter-factor: 0
+```
+
+- `initial-backoff = 1s` 表示当作业第一次发生异常时会延迟 1 秒后进行重试。
+- `backoff-multiplier = 2` 表示当作业连续异常时,每次的延迟时间翻倍。
+- `max-backoff = 10 s` 表示重试的延迟时间最多为 10 秒。
+
+基于这些参数:
+
+- 当作业发生异常进行第 1 次重试时,作业延迟 1 秒后重试。
+- 当作业发生异常进行第 2 次重试时,作业延迟 2 秒后重试(翻倍)。
+- 当作业发生异常进行第 3 次重试时,作业延迟 4 秒后重试(翻倍)。
+- 当作业发生异常进行第 4 次重试时,作业延迟 8 秒后重试(翻倍)。
+- 当作业发生异常进行第 5 次重试时,作业延迟 10 秒后重试(翻倍后超过上限,所以使用上限 10 秒做为延迟时间)。
+- 在第 5 次重试时,延迟时间已经达到了 max-backoff 的上限,所以第 5 次重试以后,作业延迟时间会保持在 10 秒不变,每次失败后都会延迟
10 秒后重试。
+
+
+```yaml
+restart-strategy.exponential-delay.attempts-before-reset-backoff: 8
+restart-strategy.exponential-delay.reset-backoff-threshold: 6 min
+```
+
+- `attempts-before-reset-backoff = 8` 表示如果作业连续重试了 8 次后仍然失败,则会失败(不再重试)。
+- `reset-backoff-threshold = 6 min` 表示当作业已经持续 6 分钟没发生异常时,则会重置延迟时间和重试次数。也就是当作业
6 分钟内没有发生异常时,如果 6 分钟后再发生异常,则重试的延迟时间初始化为 1 秒,且当前的重试次数重置为 1。
Review Comment:
> 重试次数
maybe "重试计数"?
--
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]