知识卡片

状态检查点是exactly-once语义的前提

专业/工作 · 501

内容

状态是流计算过程中缓存在内存或存储系统中的中间数据,相当于一个持续运行的程序的”本地变量”:任务接收输入、从状态中取出中间值、计算后写回状态、再输出结果。因为流计算本质是增量计算,必须依赖过去的状态才能算出正确的当前结果,所以状态的可靠性直接决定了计算的可靠性。但本地状态存储并不稳定(进程可能崩溃),必须靠检查点机制把状态定期写到远程持久存储,一旦任务失败重启,就能从检查点恢复中间数据继续算,而不是从头重跑或永久丢失中间结果。这正是Flink能保证”数据只被处理一次且不遗漏”(exactly-once)的根本前提:没有可靠的状态持久化,精确一次语义无从谈起。检查点具体如何生成一致性快照,见[[Checkpoint基于异步Barrier快照的原理]]。

参考来源

《Flink入门与实战》第2章《定义、架构与原理》