Apache Flink 是一个分布式流式计算框架,其容错机制的核心目标是:在节点失败、网络异常等情况下,保证计算结果的正确性和 Exactly-Once(或 At-Least-Once)语义。下面从原理到关键机制系统说明。
Flink 的容错建立在两个核心机制之上:
简单说:
定期保存状态 → 失败后从最近快照恢复 → 重新消费未处理的数据
Checkpoint 是 Flink 在分布式环境下的一致性快照:
Flink 使用 Chandy–Lamport 算法 的思想:
✅ 保证:同一 Checkpoint 对应的数据,要么全处理,要么全没处理
状态存储位置决定容错能力和性能:
| State Backend | 特点 |
|---|---|
| MemoryStateBackend | 内存,测试用 |
| FsStateBackend | 状态在内存,快照在文件系统 |
| RocksDBStateBackend | 状态在本地磁盘,支持超大状态(生产推荐) |
当 TaskManager 失败:
✅ 用户无感知(除短暂延迟)
Flink 自身状态是 Exactly-Once,但端到端还需要:
与 Checkpoint 区别:
| 项目 | Checkpoint | Savepoint |
|---|---|---|
| 触发方式 | 自动 | 手动 |
| 用途 | 容错 | 升级 / 迁移 |
| 格式 | 内部 | 稳定可读 |
execution.checkpointing.timeout
execution.checkpointing.min-pause
env.enableCheckpointing(5000);
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(1000);
env.setStateBackend(new RocksDBStateBackend("hdfs:///flink/ck"));
Flink 通过 Checkpoint + State + 可重放数据源,实现分布式流式计算的精准容错。
如果你愿意,我可以进一步讲:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。