Flink 容错与恢复
概述
流作业 7x24 运行,故障不可避免。Flink 的容错体系分三层:重启策略(何时重启)、故障转移(重启哪些 Task)、状态恢复(从哪恢复)。本文讲清三级恢复机制、Failover 策略与生产配置。
一、容错体系总览
故障发生
→ 重启策略决定重启方式(固定/失败率/无)
→ Failover 策略决定重启范围(全作业/局部)
→ Checkpoint 提供恢复点(状态 + offset)
→ 恢复执行| 层级 | 负责 | 关键词 |
|---|---|---|
| 重启策略 | 重启节奏 | fixed-delay、failure-rate |
| Failover | 重启范围 | full、region |
| 状态恢复 | 恢复数据 | Checkpoint、Savepoint |
二、重启策略
2.1 策略类型
| 策略 | 行为 | 适用 |
|---|---|---|
| 固定延迟重启 | 固定次数 + 固定间隔 | 生产默认推荐 |
| 失败率重启 | 单位时间失败次数上限 | 限速保护 |
| 无重启 | 失败即停 | 调试 |
| 指数退避 | 间隔递增 | 避免雪崩 |
2.2 配置
yaml
# flink-conf.yaml
restart-strategy: fixed-delay
restart-strategy.fixed-delay.attempts: 3
restart-strategy.fixed-delay.delay: 10sjava
// 代码配置
env.setRestartStrategy(
RestartStrategies.fixedDelayRestart(3, Time.seconds(10)));| 场景 | 策略 |
|---|---|
| 抖动恢复 | fixed-delay(2-3 次) |
| 大量作业 | failure-rate 限流 |
| 排查问题 | none(快速失败暴露) |
三、故障转移 Failover 策略
3.1 范围策略
| 策略 | 重启范围 | 特点 |
|---|---|---|
| Full Restart | 全部 Task 重启 | 简单、慢 |
| Region Failover | 故障所在 Region | 精确、快 |
3.2 Region 划分
算子图按依赖划分 Region(区域)
故障只重启受影响区域,其余继续运行| 策略 | 优点 | 缺点 |
|---|---|---|
| Full | 实现简单 | 全量重启浪费 |
| Region | 局部恢复 | 依赖分析复杂 |
yaml
# 配置
jobmanager.execution.failover-strategy: region3.3 局部恢复示例
Source → A → B → Sink
↘ C → D → Sink2
B 故障 → 只重启 Source/A/B 所在区域
C/D/Sink2 不受影响四、三级恢复粒度
4.1 Task 级
| 说明 | 值 |
|---|---|
| 范围 | 单个 Task 失败 |
| 处理 | 重启策略决定 |
| 恢复 | 从 Checkpoint 恢复该 Task 状态 |
4.2 算子级
| 说明 | 值 |
|---|---|
| 范围 | 故障算子及其上游区域 |
| 处理 | Region Failover |
| 恢复 | 局部状态恢复 |
4.3 作业级
| 说明 | 值 |
|---|---|
| 范围 | 整个作业 |
| 处理 | Full Restart |
| 恢复 | 全作业从 Checkpoint 恢复 |
五、本地恢复
5.1 概念
RocksDB 状态下,Checkpoint 同时保存一份到本地磁盘
恢复时优先从本地读,减少网络拉取| 配置 | 说明 |
|---|---|
state.backend.local-recovery | 开启本地恢复 |
| 生效条件 | RocksDB + 增量 Checkpoint |
5.2 收益
| 收益 | 说明 |
|---|---|
| 恢复快 | 本地读替代远端拉取 |
| 网络省 | 减少 HDFS 读 |
六、高可用(HA)
6.1 为什么需要
JobManager 是调度核心,单点故障会导致整个集群不可用。
6.2 高可用方案
| 模式 | 说明 |
|---|---|
| ZooKeeper HA | 多 JobManager 选举 |
| Kubernetes HA | K8s 自动重启 |
| Standalone HA | ZooKeeper + 多 JM |
ZooKeeper 选举出 Leader JobManager
Leader 故障 → Follower 接任 → 恢复作业
作业元数据存 ZooKeeper/文件系统| 配置 | 说明 |
|---|---|
high-availability: zookeeper | 开启 HA |
high-availability.zookeeper.quorum | ZK 地址 |
high-availability.storageDir | 元数据存储 |
七、生产容错配置清单
1. Checkpoint:开启,间隔 60-120s,存 HDFS
2. 重启策略:fixed-delay 3 次,间隔 10-30s
3. Failover:region 策略(默认)
4. RocksDB 增量 Checkpoint + 本地恢复
5. JobManager 高可用(ZK/K8s)
6. 监控:Checkpoint 失败、背压、重启次数常见问题速查
| 问题 | 原因与处理 |
|---|---|
| 重启次数耗尽 | 检查失败根因,临时调大次数 |
| 局部恢复没生效 | 确认 region 策略与依赖分析 |
| 恢复慢 | 状态大,开本地恢复/增量快照 |
| JobManager 单点 | 配置 HA |
| 频繁重启 | 看日志定位,检查背压与资源 |