深入解析:Flink 状态和 CheckPoint 的区别和联系(附源码)

news/2025/11/13 18:53:46/文章来源:https://www.cnblogs.com/gccbuaa/p/19219246

Flink 状态和checkpoint的区别和联系(附源码

  • 1. 本质区别:运行时 vs 持久化
    • 1.1 State(状态):运行时的"工作内存"
    • 1.2 Checkpoint:状态的"快照存档"
  • 2. 形象类比
  • 3. 源码层面的关系
    • 3.1 CheckpointableKeyedStateBackend:连接两者的桥梁
    • 3.2 StateHandle:Checkpoint 的元数据
    • 3.3 HeapKeyedStateBackend:实际的实现
  • 4. 完整的生命周期
    • 4.1 正常运行时
    • 4.2 Checkpoint 触发时
    • 4.3 故障恢复时
  • 5 关键区别对比表
  • 6. 源码中的协作机制
    • 6.1 Checkpoint 选项配置
    • 6.2不同类型的 Checkpoint
  • 7. 实战示例:完整流程
  • 8. 核心联系总结
    • 8.1 依赖关系
    • 8.2 协作关系
    • 8.3 性能权衡
    • 8.4 统一抽象
  • 9. 关键要点

1. 本质区别:运行时 vs 持久化

1.1 State(状态):运行时的"工作内存"

package org.apache.flink.api.common.state;
import org.apache.flink.annotation.PublicEvolving;
/**
* Interface that different types of partitioned state must implement.
*
* <p>The state is only accessible by functions applied on a {@code KeyedStream}. The key is
* automatically supplied by the system, so the function always sees the value mapped to the key of
* the current element. That way, the system can handle stream and state partitioning consistently
* together.
*/
@PublicEvolving
public interface State {

/** Removes the value mapped under the current key. */
void clear();
}

State 的特征:

  • 位置:存储在 TaskManager 的内存或本地磁盘(RocksDB)
  • 目的:算子处理数据时的"工作记忆"
  • 访问:频繁、实时、微秒级
  • 生命周期:作业运行期间一直存在
  • 可变性:每处理一条数据可能就会更新

1.2 Checkpoint:状态的"快照存档"

@Internal
public interface Snapshotable<S extends StateObject> {/*** Operation that writes a snapshot into a stream that is provided by the given {@link* CheckpointStreamFactory} and returns a @{@link RunnableFuture} that gives a state handle to* the snapshot. It is up to the implementation if the operation is performed synchronous or* asynchronous. In the later case, the returned Runnable must be executed first before* obtaining the handle.** @param checkpointId The ID of the checkpoint.* @param timestamp The timestamp of the checkpoint.* @param streamFactory The factory that we can use for writing our state to streams.* @param checkpointOptions Options for how to perform this checkpoint.* @return A runnable future that will yield a {@link StateObject}.*/@NonnullRunnableFuture<S> snapshot(long checkpointId,long timestamp,@Nonnull CheckpointStreamFactory streamFactory,@Nonnull CheckpointOptions checkpointOptions)throws Exception;}

Checkpoint 的特征:

  • 位置:持久化存储(HDFS、S3、OSS 等)
  • 目的:容错恢复的"存档点"
  • 访问:低频、定期(如每分钟)
  • 生命周期:独立于作业运行,故障恢复时使用
  • 不可变性:一旦完成就不再改变

2. 形象类比

State = 你正在编辑的 Word 文档(内存中)
↓ 每隔一段时间
Checkpoint = 保存到磁盘的文档副本(硬盘上)
↓ 如果程序崩溃
Recovery = 从最近的保存恢复(重新加载到内存)

3. 源码层面的关系

3.1 CheckpointableKeyedStateBackend:连接两者的桥梁

/**
* Interface that combines both, the {@link KeyedStateBackend} interface, which encapsulates methods
* responsible for keyed state management and the {@link Snapshotable} which tells the system how to
* snapshot the underlying state.
*
* <p><b>NOTE:</b> State backends that need to be notified of completed checkpoints can additionally
* implement the {@link CheckpointListener} interface.
*
* @param <K> Type of the key by which state is keyed.
*/
public interface CheckpointableKeyedStateBackend<K>
extends KeyedStateBackend<K>, Snapshotable<SnapshotResult<KeyedStateHandle>>, Closeable {/** Returns the key groups which this state backend is responsible for. */KeyGroupRange getKeyGroupRange();/*** Returns a {@link SavepointResources} that can be used by {@link SavepointSnapshotStrategy} to* write out a savepoint in the common/unified format.*/@NonnullSavepointResources<K> savepoint() throws Exception;}

设计理念:

  • KeyedStateBackend:管理运行时状态的读写
  • Snapshotable:提供状态快照能力
  • CheckpointableKeyedStateBackend:同时具备两种能力

3.2 StateHandle:Checkpoint 的元数据

/**
* Base for the handles of the checkpointed states in keyed streams. When recovering from failures,
* the handle will be passed to all tasks whose key group ranges overlap with it.
*/
public interface KeyedStateHandle extends CompositeStateHandle {

/** Returns the range of the key groups contained in the state. */
KeyGroupRange getKeyGroupRange();
/**
* Returns a state over a range that is the intersection between this handle's key-group range
* and the provided key-group range.
*
* @param keyGroupRange The key group range to intersect with, will return null if the
*     intersection of this handle's key-group and the provided key-group is empty.
*/
@Nullable
KeyedStateHandle getIntersection(KeyGroupRange keyGroupRange);
/**
* Returns a unique state handle id to distinguish with other keyed state handles.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/964622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抚州0.5mm镜面铝板无压痕模厂家优选,品质稳定采购无忧

近年来,国内模切材料市场持续波动,尤其在高端精密刀模领域,受原材料价格、加工工艺及区域供需关系等多重因素影响,终端产品价格呈现出明显的周期性变化。以0.5mm镜面铝板无压痕模为例,2024年第四季度至2025年第三…

松原西林瓶灌装加塞机推荐,适配冻干机半加塞功能

近年来,随着生物医药产业在东北地区的加速布局,松原市及周边区域对高精度、高洁净度灌装设备的需求持续增长。尤其在冻干制剂领域,适配冻干机的西林瓶灌装加塞机成为众多药企技术升级的关键设备。该类设备需具备半加…

XCPC 竞赛 Ubuntu 环境 DOMjudge Server 完整配置指南

XCPC 竞赛 Ubuntu 环境 DOMjudge Server 完整配置指南一、前言:什么是DOMjudge ? DOMjudge 是一款专为 XCPC(国际大学生程序设计竞赛) 设计的开源裁判系统,核心作用包括: 1.自动接收参赛队伍的代码提交,支持 C+…

v模型按开发阶段分为四阶段:单元测试、集成测试、系统测试验收测试

v模型按开发阶段分为四阶段:单元测试、集成测试、系统测试验收测试

Python迭代器_高级

点击查看代码 """ 案例:演示自定义迭代器迭代器对象&可迭代对象定义:1、迭代器对象:实现了 __iter__() 和 __next__() 方法的对象,称为迭代器对象,该方法在每次调用时返回下一个值2、可迭代对…

Python迭代器_迭代器对象可迭代对象必须分开场景

点击查看代码 """ 案例:展示了迭代器对象和可迭代对象必须分开实现的场景:- **核心需求**:多个迭代器需要同时独立遍历同一个数据集 - **问题所在**:单一类实现时,所有迭代器共享同一个状态变量,…

251113

JT-JY14T1S1Good morning, what can i do for you? I wonder report a theft. I had something stolen out of bag yesterday. I sorry to hear that. RIght, i need to take a few details. Can i start with your n…

H模型流程

主流程: 产品召开需求会议测试和开发拿到需求分析需求测试经理编写测试计划,安排测试工作测试人员分析需求,编写测试用例评审测试用例,评审通过将用例倒入到用例管理工具中搭建环境 开发提测代码包,达到了准入要求…

集合框架、io流、多线程

集合框架、io流、多线程

Ubuntu 22.04 x86_64 cron不执行原因 - whitesky

背景:美西VPS,设置cron定时任务,到了时间不执行,cron服务正常运行,脚本有执行权限, 手动执行没问题查看时区, timedatectl # 发现是UTC时区,修改为东八区时间: timedatectl set-timezone Asia/Shanghaitimeda…

为啥要搞utf-8等,直接存储Unicode码点不行吗?

Unicode本身无法直接作为实现方案,核心原因是它仅定义“字符-码点”映射,未规定二进制存储/传输规则,必须通过UTF等编码方案落地。 一、Unicode的本质局限仅定义映射关系:Unicode就像一本“全球字符字典”,只给每…

2025 年 11 月闸阀厂家推荐排行榜,美标闸阀,国标闸阀,锻钢闸阀,高压闸阀,碳钢闸阀,高温闸阀,焊接闸阀,法兰闸阀公司推荐

2025年11月闸阀厂家推荐排行榜:专业解析美标、国标、锻钢等各类闸阀企业实力 在工业流体控制领域,闸阀作为关键的控制元件,其性能和质量直接影响着整个管道系统的安全运行。随着工业技术的不断发展,各类闸阀产品在…

2025年国内商标注册机构综合实力排行榜:专业服务商深度解析

文章摘要 随着知识产权保护意识的提升,2025年国内商标注册行业迎来快速发展期,市场规模预计突破千亿元。本文基于权威数据和技术参数,深度评测当前市场上主流商标注册服务商,为企业和个人提供专业选择指南。文章包…

湛江西林瓶灌装旋盖机,选配IQ/OQ/PQ验证款

在当前制药与生物制品设备采购趋势中,越来越多企业将决策重心从单纯的初始购置成本转向全生命周期价值评估。随着GMP合规要求日益严格,IQ/OQ/PQ验证文件的完整性、设备运行稳定性以及后期维护便捷性,已成为西林瓶灌…

2025年安徽商标注册公司Top5排行榜:专业机构深度解析

摘要 随着知识产权意识的提升,2025年商标注册行业在安徽地区呈现快速增长趋势,企业对于专业商标服务的需求日益旺盛。本文基于行业数据和用户口碑,为您呈现一份权威的安徽商标注册公司排行榜单,旨在帮助创业者及企…

锦州出口欧美西林瓶灌装压塞机 FDA认证

当前,西林瓶灌装设备出口欧美市场面临显著的价格与价值错配问题。一方面,部分低价机型虽标榜“经济实惠”,却因缺乏FDA认证、无菌保障不足或自动化程度低下,导致客户在清关、合规及后续运维中承担高昂隐性成本;另…

凉山中药混悬剂西林瓶灌装机选型,防沉淀封口成本可控

在当前中药制剂产业升级背景下,凉山地区多家中成药生产企业正加速推进混悬剂类产品的自动化灌装改造。中药混悬剂因成分复杂、易沉降、黏度波动大等特点,对西林瓶灌装设备提出了更高要求——不仅需具备良好的防沉淀搅…

沈阳压死边折弯机模具价格影响因素及采购攻略

近年来,沈阳作为东北地区重要的工业制造基地,在钣金加工、机械装备及模具配套领域持续保持活跃态势。尤其在压死边折弯机模具这一细分品类中,本地企业对高精度、高稳定性产品的需求稳步上升。受原材料价格波动、运输…

贝叶斯优化之采集函数 0基础学习

写在前面:什么是贝叶斯优化 参考这里 主要包含两个部分一个代理模型(surrogate model),用于对目标函数进行建模。代理模型通常有确定的公式或者能计算梯度,又或者有已知的凹凸性、线性等特性,总之就是更容易用于…