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

特效音网站建设公司官网制作平台

特效音网站,建设公司官网制作平台,大学院系网站建设,seo网站优化推广怎么做深入解析 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/470494.html

相关文章:

  • MySQL数据库安装后,如何设置自动化备份策略?
  • 【开题答辩全过程】以 保险业务信息管理系统为例,包含答辩的问题和答案
  • 进口食品销售销售在那个网站做seo托管
  • 公司模板网站建设成绩查询系统网站开发
  • 建设大淘客网站雅布设计师
  • Oracle ADRCI工具全面使用指南:从基础到故障诊断实战
  • 美食网站设计欣赏上海著名网站建设
  • 【智能系统项目开发与学习记录】bringup功能包详解
  • 外贸网建站建公司网站的详细步骤
  • 美食网站建设书成都seo技术
  • 江河建设集团有限公司网站梧州网站建设流程
  • 在Qt中使用VTK
  • 正安北郊湖吉他文化广场自动化监测
  • 【论文阅读】DSPy-based neural-symbolic pipeline to enhance spatial reasoning in LLMs
  • cn域名后缀网站163企业邮箱格式
  • psql常用命令
  • 高速公路自动车道保持系统原理与实现
  • 番禺做网站最便宜的哪家公司wordpress注册界面
  • 【推荐100个unity插件】将您的场景渲染为美丽的冬季风景——Global Snow 2
  • Windows安装Elasticsearch保姆级教程
  • 温州网站链接怎么做在山东省建设监理协会网站
  • C++中的父继子承:继承方式实现栈及同名隐藏和函数重载的本质区别, 派生类的4个默认成员函数
  • 32.渗透-.Kali Linux-工具-netcat的说明
  • Large Kernel Modulation Network for Efficient Image Super-Resolution 学习笔记
  • 城乡住房建设部网站杭州市萧山区哪家做网站的公司好
  • 高精度逆向工程:XTOM蓝光扫描仪赋能自由曲面微尺寸共性电路的增材制造
  • 多区域主动-主动(PostgreSQL 逻辑复制 + 冲突解决)在 ABP 的落地
  • 东莞精密机械制造工厂如何10个SolidWorks共用一台服务器资源
  • 六盘水市住房和城乡建设局网站wordpress 淘宝客app
  • Google 智能体设计模式:推理技术