1. Restart Strategy失败后怎么重启1.1 默认行为到底是什么没开 checkpoint默认就是不重启disable / none (nightlies.apache.org)开了 checkpoint 且你没显式配置默认使用exponential-delay指数退避并采用它相关参数的默认值 (nightlies.apache.org)这个“默认指数退避”非常关键因为它本质是在帮你避免外部系统故障时的“雪崩式重启风暴”比如 Kafka 挂了上百个 Flink 作业同时 1 秒一次狂重启把 Kafka 彻底打穿。官方也明确强调指数退避 jitter抖动能让多个作业错峰重启降低雪崩风险。 (nightlies.apache.org)1.2 四类常用策略怎么选A. fixed-delay固定间隔重启适合明确知道外部系统需要“冷却时间”例如下游连接要等超时释放、事务要等回滚完成希望每次都固定等一段时间再起。 (nightlies.apache.org)典型配置集群默认flink-conf.yamlrestart-strategy.type:fixed-delayrestart-strategy.fixed-delay.attempts:3restart-strategy.fixed-delay.delay:10 s含义最多 3 次每次失败后等 10 秒再起。 (nightlies.apache.org)B. failure-rate失败率控制适合你允许偶发失败快速恢复但如果“单位时间内失败太多”就直接让作业失败避免无限重启掩盖真实问题。 (nightlies.apache.org)典型配置restart-strategy.type:failure-raterestart-strategy.failure-rate.max-failures-per-interval:3restart-strategy.failure-rate.failure-rate-interval:5 minrestart-strategy.failure-rate.delay:10 sC. exponential-delay指数退避生产强推适合绝大多数流式作业的默认选择。偶发故障时能很快恢复连续故障时逐步拉长间隔避免压垮外部系统还能用 jitter 做错峰。 (nightlies.apache.org)关键参数你最常会调的initial-backoff第一次重启等待多久backoff-multiplier每次失败等待时间按倍率增长max-backoff最大等待上限reset-backoff-threshold作业稳定运行多久后把退避重置回初始值jitter-factor抖动比例强烈建议别设 0 (nightlies.apache.org)示例比较“通用”的生产口味restart-strategy.type:exponential-delayrestart-strategy.exponential-delay.initial-backoff:10 srestart-strategy.exponential-delay.max-backoff:2 minrestart-strategy.exponential-delay.backoff-multiplier:1.4restart-strategy.exponential-delay.reset-backoff-threshold:10 minrestart-strategy.exponential-delay.jitter-factor:0.1restart-strategy.exponential-delay.attempts-before-reset-backoff:10(nightlies.apache.org)D. none/disable不重启适合确定是“逻辑 bug / 配置错误 / 数据不可恢复坏数据”重启也只会反复失败干脆失败后报警避免消耗资源与污染外部系统。 (nightlies.apache.org)1.3 集群默认 vs 作业级覆盖推荐做法集群层面给一个“不会雪崩”的默认通常 exponential-delay作业层面对少数特殊作业强依赖外部事务、非常敏感的 SLA 作业单独覆盖策略作业级Java示例固定延迟ConfigurationconfignewConfiguration();config.set(RestartStrategyOptions.RESTART_STRATEGY,fixed-delay);config.set(RestartStrategyOptions.RESTART_STRATEGY_FIXED_DELAY_ATTEMPTS,3);config.set(RestartStrategyOptions.RESTART_STRATEGY_FIXED_DELAY_DELAY,Duration.ofSeconds(10));StreamExecutionEnvironmentenvStreamExecutionEnvironment.getExecutionEnvironment(config);(nightlies.apache.org)2. Failover Strategy这次失败要重启哪些 taskRestart Strategy 决定“怎么重启”Failover Strategy 决定“重启范围”。Flink 支持两种 failover 策略通过jobmanager.execution.failover-strategy配置 (nightlies.apache.org)full重启整个作业所有 taskregion重启pipelined region最小必要重启集合 (nightlies.apache.org)2.1 full简单粗暴代价大优点逻辑简单恢复路径最“直觉”。缺点哪怕只是一个小算子失败也可能把全图都拉起来重启恢复冲击更大。 (nightlies.apache.org)2.2 region只重启必要的那一片生产常用region 策略会把作业图划分为多个“互不重叠的 region”。当某个 task 失败时它会计算最小需要重启的 region 集合来保证一致性通常能比 full 少重启很多 task。 (nightlies.apache.org)region 的边界定义很关键region 是一组通过pipelined 数据交换通信的 tasksbatch 数据交换会成为 region 的边界 (nightlies.apache.org)并且 DataStream/Table/SQL 的交换方式与ExecutionMode有关Streaming 模式下是 pipelinedBatch 模式默认是 batched。 (nightlies.apache.org)region 策略的“重启扩散规则”是必重启失败 task 所在 region如果某个 region 需要的结果分区不可用则把生产该分区的 region 也重启只要某个 region 要重启它的所有 consumer regions 也要重启以保证一致性尤其是非确定性处理/分区可能导致分区结果变化 (nightlies.apache.org)3. 一套拿来就能用的生产配置模板3.1 flink-conf.yaml集群默认适用于大多数流作业restart-strategy.type:exponential-delayrestart-strategy.exponential-delay.initial-backoff:5 srestart-strategy.exponential-delay.max-backoff:2 minrestart-strategy.exponential-delay.backoff-multiplier:1.5restart-strategy.exponential-delay.reset-backoff-threshold:10 minrestart-strategy.exponential-delay.jitter-factor:0.1jobmanager.execution.failover-strategy:region指数退避避免雪崩region 减少重启范围是非常稳的一组默认组合。 (nightlies.apache.org)3.2 什么时候别用“无限重启”如果是确定性的逻辑错误、配置错误、或坏数据必炸建议用failure-rate限制单位时间重启次数或者直接none失败报警防止“作业看起来一直在跑但其实在循环重启”。 (nightlies.apache.org)4. 排障小抄看到这些现象该往哪查短时间大量作业一起重启优先检查是否外部依赖故障Kafka/HDFS/DB并确认指数退避 jitter 是否启用、参数是否过激initial 太小、jitter0。 (nightlies.apache.org)单个算子失败导致全图反复重启确认 failover 是否还是full能否切到region降低冲击。 (nightlies.apache.org)恢复后数据一致性问题关注 region 重启的 consumer 扩散逻辑与作业里是否存在非确定性处理/分区region 策略会主动扩大重启范围就是为了这个。 (nightlies.apache.org)