当前位置: 首页 > news >正文

网站系统cmsphp教育网站开发工作

网站系统cms,php教育网站开发工作,绘图软件有哪些,响应式网站404页面怎么做深入解析 Apache Flink Checkpoint 与 Savepoint 原理与最佳实践 一、技术背景与应用场景 在大数据实时处理领域,Apache Flink 因其强大的状态管理与容错能力,广受用户青睐。在流式场景中,应用往往需要维护大量状态数据(如窗口聚合…

cover

深入解析 Apache Flink Checkpoint 与 Savepoint 原理与最佳实践

一、技术背景与应用场景

在大数据实时处理领域,Apache Flink 因其强大的状态管理与容错能力,广受用户青睐。在流式场景中,应用往往需要维护大量状态数据(如窗口聚合、会话管理、复杂事件处理等),一旦作业故障重启,必须保证状态一致性,避免重复消费或数据丢失。

Flink 提供了两套机制:Checkpoint 与 Savepoint。二者都能将算子状态持久化到外部存储,但在定位和使用场景上有所差异:

  • Checkpoint:作业在运行中自动触发,用于故障恢复,通常与 JobManager 协调。频率可配置,损耗较小。
  • Savepoint:手动触发,往往用于有版本迭代或升级的场景,可将状态保存到指定路径,支持迁移到新版本作业。

本文将深入分析 Checkpoint 与 Savepoint 的原理、关键源码、对比优劣,以及生产环境中的优化实践。

二、核心原理深入分析

2.1 Flink 的一致性快照(Chandy–Lamport 算法)

Flink 的状态后端与流快照机制基于Chandy–Lamport 分布式快照算法

  1. JobManager(协调者)发起 Checkpoint,向所有 TaskManager 广播 CheckpointBarrier
  2. Barrier 随数据流插入每条数据流(对有向无环图的每条输入边),算子收到 Barrier 后,先将该条 Barrier 及之前的数据写入状态后端,之后转发 Barrier,下游算子进入 snapshot 阶段。
  3. 当所有算子都收到所有输入边的 Barrier 后,算子完成本地状态快照,由 TaskManager 通知 JobManager。
  4. JobManager 收集所有通知后,确认 Checkpoint 完成,并发布最新有效的 CheckpointId。

这种无阻塞方案可保证在持续写入数据时并发地做状态快照,确保端到端的一致性。

2.2 Checkpoint 与 Savepoint 的区别

| 特性 | Checkpoint | Savepoint | |-------------|-------------------|-------------------| | 触发方式 | 自动 / 周期性 | 手动触发 | | 协调器角色 | JobManager 管理 | 客户端发起 | | 存储路径 | 配置指定 | 用户指定 | | 生命周期 | 覆盖老 Checkpoint | 保留历史,用户自行管理 | | 使用场景 | 故障恢复 | 版本升级、平滑重启 |

三、关键源码解读

以下从 Flink 1.15.0 源码摘取关键逻辑,帮助理解内部实现。

3.1 Checkpoint 协调核心

// CheckpointCoordinator.java
public void triggerCheckpoint(...) {long checkpointId = nextCheckpointId();CoordinationRequestCheckpoint checkpointReq = new CoordinationRequestCheckpoint(checkpointId);// 向所有执行 vertex 发送 checkpoint barrierfor (ExecutionVertex vertex : currentExecutions) {vertex.sendOperatorEvent(operatorId, checkpointReq);}// 超时调度scheduleTimeout(checkpointId);
}

3.2 Barrier 路由及状态写入

// OperatorChain.java
public void processBarrier(CheckpointBarrier barrier, int channelIndex) throws Exception {if (isFirstBarrier(barrier)) {streamOperator.prepareSnapshot(barrier.getCheckpointId());}// 写入状态KeyedStateBackend<?> backend = stateBackend;backend.snapshot(barrier.getCheckpointId(), ...);// 转发 barrier 到下游算子output.collect(barrier);
}

3.3 Savepoint 触发与恢复

# 触发 savepoint
bin/flink savepoint :jobId [:targetDirectory]# 恢复作业
bin/flink run -s :savepointPath -c com.example.JobClass /path/to/jar

在源码中,Savepoint 被视为带有特殊标记的 Checkpoint,有自己独立的协调器逻辑,区别在于不会被老 Checkpoint 覆盖,并支持手动恢复。

四、实际应用示例

下面展示一个基于 Java DataStream 的示例,配置 Checkpoint 与 Savepoint,并进行状态恢复。

public class WordCountWithCheckpoint {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();// 设置状态后端为 FSStateBackendenv.setStateBackend(new FsStateBackend("hdfs://namenode:8020/flink/checkpoints"));// 启用 Checkpoint,每隔 10senv.enableCheckpointing(10000);env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);env.getCheckpointConfig().setMinPauseBetweenCheckpoints(5000);env.getCheckpointConfig().setCheckpointTimeout(60000);env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);// 设置保存点目录env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);DataStream<String> text = env.socketTextStream("localhost", 9999);text.flatMap(new Tokenizer()).keyBy(value -> value.f0).sum(1).print();env.execute("WordCountWithCheckpoint");}
}public static class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {@Overridepublic void flatMap(String value, Collector<Tuple2<String, Integer>> out) {for (String token : value.toLowerCase().split("\\W+")) {if (token.length() > 0) {out.collect(new Tuple2<>(token, 1));}}}
}

从 Savepoint 恢复

bin/flink run -s hdfs://namenode:8020/flink/savepoints/savepoint-1234 target/my-flink-job.jar

五、性能特点与优化建议

  1. StateBackend 选择:

    • RocksDBStateBackend 适合大状态(超 GB 级),支持增量 Checkpoint;
    • FsStateBackend 性能优越,但不适合超大状态。
  2. 增量 Checkpoint:针对 RocksDB 后端,可配置 setIncrementalCheckpoints(true) 减少到外部存储的数据量。

  3. 调整并发度与 Checkpoint 频率:

    • maxConcurrentCheckpoints 控制最大并发,避免过多占用磁盘;
    • 合理设定 checkpointInterval 保证业务延迟与容错需求平衡。
  4. 网络与存储优化:

    • 将 StateBackend 存储部署在本地 SSD 或高吞吐 HDFS;
    • 优化网络带宽,保障 Barrier 数据传输顺畅。
  5. Savepoint 管理:

    • 定期清理无用 Savepoint,避免存储空间泄漏;
    • 制定版本迭代策略,保证迁移平滑。

六、总结

本文以原理解析为主线,深入剖析了 Flink Checkpoint 与 Savepoint 的底层一致性快照机制、源码实现及其对比,结合 Java 示例,演示了如何在生产环境中配置和恢复。同时给出了选型与性能优化建议,帮助读者在构建实时计算平台时,实现高可用、高性能的状态管理与容错。

http://www.dtcms.com/a/483015.html

相关文章:

  • 在Ubuntu22.04和24.04中安装Docker并安装和配置Java、Mysql、Tomcat
  • 【Linux】线程同步与互斥(1)
  • 网站开发英语英语义乌网八方资源家1688网商网
  • 基于单片机的PID调节脉动真空灭菌器上位机远程监控设计
  • 汕头网站关键词优化教程资源分享网站怎么做
  • STM32H7xx 运行 LWIP 时的 MPU 配置介绍 LAT1510
  • 能动框架战场:如何摆脱供应商锁定并在下次AI战争中生存
  • 免费试用网站空间人人开发接单官网
  • 视联网技术产业观察与分析:视频隐私与安全防护
  • 南通网站建设祥云深圳罗湖网站设计公司
  • 基于蚁群算法优化BP神经网络的实现方法
  • 《Effective Java》第10条:覆盖 equals 时请遵守通用规定
  • 广东广州快速网站制作平台鄂州网站建设哪家好
  • 安卓android自动化测试-uiautomator/uiautomator2
  • 天津 网站设计公司门户网站制作定做
  • React组件复用导致的闪烁问题及通用解决方案
  • Java EE开发技术(Servlet整合JDBC银行管理系统-上)
  • 深入理解string底层:手写高效字符串类
  • 做国际网站有用吗基础建设图片
  • 启动hbase后,hbmaster总是挂
  • 自助网站建设开发流程步骤西安活动策划执行公司
  • 计算机系统---CPU的进程与线程处理
  • cv_bridge和openCV不兼容问题
  • json转excel python pd
  • 上海网站建设排名公司哪家好天蝎网站建设公司
  • 进入网络管理的网站不想用原来的网站模板了就用小偷工具采集了一个可是怎么替换
  • 西安注册公司在哪个网站系统哈尔滨模板网站
  • android 开机启动 无线调试
  • Polaris Officev9.9.12全功能解锁版
  • 云信im在Android的使用