Flink状态恢复的过程是怎样的?

提问者:帅平 问题分类:面试刷题
Flink状态恢复的过程是怎样的?
1 个回答
樱花下的编程者
樱花下的编程者
Flink状态恢复的过程是:
1、故障检测与作业重启
TaskManager 定期发送心跳至 JobManager,超时未收到则判定为故障。
JobManager 标记故障 TaskManager 上的所有任务为失败。
JobManager 重新调度所有受影响的任务(默认重启整个作业,除非配置了 Region Failover)。
从 ​最近的完整 Checkpoint​ 恢复(默认策略)或指定 Savepoint。
2、恢复元数据与状态分配
JobManager 从外部存储读取 Checkpoint 元数据,确认所有算子的状态文件路径及输入流位置(如 Kafka Offset)。
根据 Checkpoint 中的并行度信息,将任务重新调度到健康的 TaskManager 上。
如果并行度调整(如扩缩容),触发 ​KeyGroup 重分配​(基于 Key 的哈希范围重新分布状态)。
3、状态加载与任务初始化
RocksDBStateBackend​:每个 TaskManager 从分布式存储下载快照的 SST 文件到本地 RocksDB 实例。
HashMapStateBackend​:直接加载内存中的状态数据到堆内存。
Source 算子(如 Kafka Consumer)从 Checkpoint 中记录的 Offset 重新拉取数据,确保数据不丢失不重复。
4、数据处理续传
所有算子从恢复后的状态开始处理数据,确保后续计算的 Exactly-Once 语义。
通过 ​Barrier 对齐​ 和 ​事务性输出​(如 Kafka 两阶段提交)保障端到端一致性。
发布于:3周前 (05-16) IP属地:
我来回答