赞
踩
看完本文,你能掌握以下知识:
Flink 是一个流式处理框架,支持有状态的计算。状态数据是指在处理每个元素或事件时,系统存储的数据,这些数据可以修改、查询,并根据业务需求保存历史数据或中间结果。
例子:
无状态计算的例子:
有状态计算的例子:
CheckPoint 的作用
CheckPoint 是为了在任务故障后恢复任务状态,保证任务的高可用。它通过快照保存任务状态,当任务挂掉后,从最近一次的完整快照恢复。
快照是什么?
快照(Snapshot)是将程序在某一时刻的状态保存下来,便于后续恢复。以 PV 统计为例,我们从 Kafka 读取日志,将统计结果保存到内存中并定期做快照。
CheckPoint 保存的信息
任务恢复
如何保证快照的准确性
什么是 barrier 对齐?
一旦 Operator 接收到 CheckPoint barrier n,它必须等到所有输入流的 barrier n 都到达后,才能继续处理数据记录。这避免了混合快照 n 和快照 n+1 的数据记录。
什么是 barrier 不对齐?
为什么 barrier 对齐是 Exactly Once?
对齐的 barrier 确保所有数据在快照时被处理,不会出现重复消费。举例:在 checkpoint 中,barrier 对齐的情况不会有重复消费,而不对齐的情况可能出现重复消费。
总结
Exactly Once: 必须 barrier 对齐,确保每条记录仅被处理一次。
At Least Once: 如果 barrier 不对齐,可能会出现数据重复处理。
多并行度、多 Operator 情况下的 CheckPoint 过程
分布式状态容错问题
全域一致的快照
状态恢复
CheckPoint 执行过程
通过确保 barrier 对齐,Flink 能够提供 Exactly Once 语义,避免数据丢失和重复消费。而不对齐的 barrier 则可能导致 At Least Once 的语义,可能出现重复处理数据的情况。
希望这篇博客能够帮助你更好地理解 Flink 的 CheckPoint 机制以及 barrier 对齐的重要性。如果你有任何问题或需要进一步的解释,请随时联系我!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。