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

Flink Unaligned Checkpoint

目录

Checkpoint与反压的耦合

Aligned Checkpoint和Chandy-Lamport差异:

Aligned Checkpoint

Chandy-Lamport

Unaligned Checkpoint

Aligned Checkpoint和Unaligned Checkpoint 适用场景


Checkpoint与反压的耦合

目前的Checkpoint算法在大多情况下运行良好,然而当作业出现反压时,阻塞式的Barrier对齐反而会加剧作业的反压,甚至导致作业的不稳定。

首先,Chandy-Lamport分布式快照的结束依赖于Marker的流动,而反压则会限制Marker的流动,导致快照的完成时间变长甚至超时。无论是哪种情况,都会导致Checkpoint的时间点落后于实际数据流较多。这时作业的计算进度是没有被持久化的,处于一个比较脆弱的状态,如果作业处于异常被动重启或者被用户主动重启,作业会回滚丢失一定的进度。如果CheckPoint连续超时且没有很好的监控,回滚丢失的进度可能高达一天以上,对于实时业务这通常是不可接受的,更糟糕的是,回滚后的作业落后的Lag更大,通常带来更大的反压,形成一个恶性循环。

为了解决这个问题,Flink 在1.11版本引入Unaligned Checkpoint的特性

Flink 1.11中Unaligned Checkpoint 主要解决在高反压情况下作业难以完成Checkpoint问题,同时它以磁盘资源为代价,避免了Checkpoint可能带来的阻塞,有利于提升Flink的资源利用率。

Aligned Checkpoint和Chandy-Lamport差异:

  1. 快照的触发是在接收到第一个Barrier时还是在接收到最后一个Barrier时
  2. 是否需要阻塞已经接收到Barrier的Channel的计算

Aligned Checkpoint

 

  • 图 a: 输入 Channel 1 存在 3 个元素,其中 2 在 Barrier 前面;Channel 2 存在 4 个元素,其中 2、9、7在 Barrier 前面。
  • 图 b: 算子分别读取 Channel 一个元素,输出 2。随后接收到 Channel 1 的 Barrier,停止处理 Channel 1 后续的数据,只处理 Channel 2 的数据。
  • 图 c: 算子再消费 2 个自 Channel 2 的元素,接收到 Barrier,开始本地快照并输出 Barrier。

Chandy-Lamport

  • 图 a: 输入 Channel 1 存在 3 个元素,其中 2 在 Barrier 前面;Channel 2 存在 4 个元素,其中 2、9、7在 Barrier 前面。
  • 图 b: 算子分别处理两个 Channel 一个元素,输出结果 2。此后接收到 Channel 1 的 Barrier,算子开始本地快照记录自己的状态,并输出 Barrier。
  • 图 c: 算子继续正常处理两个 Channel 的输入,输出 9。特别的地方是 Channel 2 后续元素会被保存下来,直到 Channel 2 的 Barrier 出现(即 Channel 2 的 9 和 7)。保存的数据会作为 Channel 的状态成为快照的一部分。

 不同于 Chandy-Lamport 模型的只需要考虑算子输入 Channel 的状态,Flink 的算子有输入和输出两种 Channel,在快照时两者的状态都需要被考虑。

Unaligned Checkpoint

  • 图 a: 输入 Channel 1 存在 3 个元素,其中 2 在 Barrier 前面;Channel 2 存在 4 个元素,其中 2、9、7在 Barrier 前面。输出 Channel 已存在结果数据 1。
  • 图 b: 算子优先处理输入 Channel 1 的 Barrier,开始本地快照记录自己的状态,并将 Barrier 插到输出 Channel 末端。
  • 图 c: 算子继续正常处理两个 Channel 的输入,输出 2、9。同时算子会将 Barrier 越过的数据(即输入 Channel 1 的 2 和输出 Channel 的 1)写入 Checkpoint,并将输入 Channel 2 后续早于 Barrier 的数据(即 2、9、7)持续写入 Checkpoint。

比起 Aligned Checkpoint 中不同 Checkpoint 周期的数据以算子快照为界限分隔得很清晰,Unaligned Checkpoint 进行快照和输出 Barrier 时,部分本属于当前 Checkpoint 的输入数据还未计算(因此未反映到当前算子状态中),而部分属于当前 Checkpoint 的输出数据却落到 Barrier 之后(因此未反映到下游算子的状态中)。

这也正是 Unaligned 的含义: 不同 Checkpoint 周期的数据没有对齐,包括不同输入 Channel 之间的不对齐,以及输入和输出间的不对齐。而这部分不对齐的数据会被快照记录下来,以在恢复状态时重放。换句话说,从 Checkpoint 恢复时,不对齐的数据并不能由 Source 端重放的数据计算得出,同时也没有反映到算子状态中,但因为它们会被 Checkpoint 恢复到对应 Channel 中,所以依然能提供只计算一次的准确结果。

当然,Unaligned Checkpoint 并不是百分百优于 Aligned Checkpoint,它会带来的已知问题就有:

  1. 由于要持久化缓存数据,State Size 会有比较大的增长,磁盘负载会加重。
  2. 随着 State Size 增长,作业恢复时间可能增长,运维管理难度增加。

Aligned Checkpoint和Unaligned Checkpoint 适用场景

目前看来,Unaligned Checkpoint 更适合容易产生高反压同时又比较重要的复杂作业。对于像数据 ETL 同步等简单作业,更轻量级的 Aligned Checkpoint 显然是更好的选择。

相关文章:

  • 数据面最流行的工具包dpdk的前世-现在和未来
  • C++异步:asio的scheduler实现!
  • 跨境电商:YouTube视频营销必看攻略
  • 01 HTTP协议相关
  • 广州市车联网车联网先导区 V2X 云控基础平台技术规范
  • 怎么申报高新?流程是什么??
  • HFSS脚本建模入门
  • 「运维有小邓」自助AD更新
  • 【LeetCode】双指针题总结(持续更新)
  • 专业的ADAS测试记录仪ETHOS
  • 【Java面试】听说Java求职者/面试官都关注了我,这道面试题一个空Object对象的占多大空间?你答的上来吗
  • CAD如何使插入的块为分解状态?CAD如何绘制五瓣花?
  • AVProVideo☀️四、视频播放案例
  • 支持流畅运行win10的最低配置是什么
  • 不以功利谈“感统”:拒绝焦虑,顺应养育,才能让孩子走得更远
  • 【刷算法】求1+2+3+...+n
  • Android 架构优化~MVP 架构改造
  • django开发-定时任务的使用
  • ES6简单总结(搭配简单的讲解和小案例)
  • in typeof instanceof ===这些运算符有什么作用
  • mysql常用命令汇总
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Windows Containers 大冒险: 容器网络
  • 对象管理器(defineProperty)学习笔记
  • 区块链共识机制优缺点对比都是什么
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • nb
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #QT(TCP网络编程-服务端)
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (第61天)多租户架构(CDB/PDB)
  • (多级缓存)缓存同步
  • (二开)Flink 修改源码拓展 SQL 语法
  • (转)shell调试方法
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET 4.0中的泛型协变和反变
  • .net6Api后台+uniapp导出Excel
  • .NET框架设计—常被忽视的C#设计技巧
  • /*在DataTable中更新、删除数据*/
  • /etc/sudoers (root权限管理)
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • ;号自动换行
  • ?
  • @RequestMapping处理请求异常
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [BT]BUUCTF刷题第9天(3.27)
  • [C++]priority_queue的介绍及模拟实现
  • [Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包