当前位置:首页 >热点 >图解 Flink 的 Checkpoint 机制 由于采用的机制是分布式架构

图解 Flink 的 Checkpoint 机制 由于采用的机制是分布式架构

2024-06-30 16:23:05 [百科] 来源:避面尹邢网

图解 Flink 的图解 Checkpoint 机制

作者: 西贝 存储 通过本文,你可以了解到什么是机制全局一致性检查点,Flink内部如何通过检查点实现Exactly Once的图解结果保障。

Flink是机制一个分布式的流处理引擎,而流处理的图解其中一个特点就是7X24。那么,机制如何保障Flink作业的图解持续运行呢?Flink的内部会将应用状态(state)存储到本地内存或者嵌入式的kv数据库(RocksDB)中,由于采用的机制是分布式架构,Flink需要对本地生成的图解状态进行持久化存储,以避免因应用或者节点机器故障等原因导致数据的机制丢失,Flink是图解通过checkpoint(检查点)的方式将状态写入到远程的持久化存储,从而就可以实现不同语义的机制结果保障。通过本文,图解你可以了解到什么是机制全局一致性检查点,Flink内部如何通过检查点实现Exactly Once的图解结果保障。

图解 Flink 的 Checkpoint 机制 由于采用的机制是分布式架构

什么是Checkpoint(检查点)

为了保证state容错,Flink提供了处理故障的措施,这种措施称之为checkpoint(一致性检查点)。checkpoint是Flink实现容错的核心功能,主要是周期性地触发checkpoint,将state生成快照持久化到外部存储系统(比如HDFS)。这样一来,如果Flink程序出现故障,那么就可以从上一次checkpoint中进行状态恢复,从而提供容错保障。另外,通过checkpoint机制,Flink可以实现Exactly-once语义(Flink内部的Exactly-once,关于端到端的exactly_once,Flink是通过两阶段提交协议实现的)。下面将会详细分析Flink的checkpoint机制。

图解 Flink 的 Checkpoint 机制 由于采用的机制是分布式架构

检查点的生成

图解 Flink 的 Checkpoint 机制 由于采用的机制是分布式架构

如上图,输入流是用户行为数据,包括购买(buy)和加入购物车(cart)两种,每种行为数据都有一个偏移量,统计每种行为的个数。

第一步:JobManager checkpoint coordinator 触发checkpoint。

第二步:假设当消费到[cart,3]这条数据时,触发了checkpoint。那么此时数据源会把消费的偏移量3写入持久化存储。

第三步:当写入结束后,source会将state handle(状态存储路径)反馈给JobManager的checkpoint coordinator。

第四步:接着算子count buy与count cart也会进行同样的步骤

第五步:等所有的算子都完成了上述步骤之后,即当 Checkpoint coordinator 收集齐所有 task 的 state handle,就认为这一次的 Checkpoint 全局完成了,向持久化存储中再备份一个 Checkpoint meta 文件,那么整个checkpoint也就完成了,如果中间有一个不成功,那么本次checkpoin就宣告失败。

检查点的恢复

通过上面的分析,或许你已经对Flink的checkpoint有了初步的认识。那么接下来,我们看一下是如何从检查点恢复的。

  • 任务失败

  • 重启作业

  • 恢复检查点

继续处理数据

上述过程具体总结如下:

  • 第一步:重启作业
  • 第二步:从上一次检查点恢复状态数据
  • 第三步:继续处理新的数据

Flink内部Exactly-Once实现

Flink提供了精确一次的处理语义,精确一次的处理语义可以理解为:数据可能会重复计算,但是结果状态只有一个。Flink通过Checkpoint机制实现了精确一次的处理语义,Flink在触发Checkpoint时会向Source端插入checkpoint barrier,checkpoint barriers是从source端插入的,并且会向下游算子进行传递。checkpoint barriers携带一个checkpoint ID,用于标识属于哪一个checkpoint,checkpoint barriers将流逻辑是哪个分为了两部分。对于双流的情况,通过barrier对齐的方式实现精确一次的处理语义。

关于什么是checkpoint barrier,可以看一下CheckpointBarrier类的源码描述,如下:

  1. /** 
  2.  * Checkpoint barriers用来在数据流中实现checkpoint对齐的. 
  3.  * Checkpoint barrier由JobManager的checkpoint coordinator插入到Source中, 
  4.  * Source会把barrier广播发送到下游算子,当一个算子接收到了其中一个输入流的Checkpoint barrier时, 
  5.  * 它就会知道已经处理完了本次checkpoint与上次checkpoint之间的数据. 
  6.  * 
  7.  * 一旦某个算子接收到了所有输入流的checkpoint barrier时, 
  8.  * 意味着该算子的已经处理完了截止到当前checkpoint的数据, 
  9.  * 可以触发checkpoint,并将barrier向下游传递 
  10.  * 
  11.  * 根据用户选择的处理语义,在checkpoint完成之前会缓存后一次checkpoint的数据, 
  12.  * 直到本次checkpoint完成(exactly once) 
  13.  * 
  14.  * checkpoint barrier的id是严格单调递增的 
  15.  * 
  16.  */ 
  17.     public class CheckpointBarrier extends RuntimeEvent { ...} 

可以看出checkpoint barrier主要功能是实现checkpoint对齐的,从而可以实现Exactly-Once处理语义。

下面将会对checkpoint过程进行分解,具体如下:

图1,包括两个流,每个任务都会消费一条用户行为数据(包括购买(buy)和加购(cart)),数字代表该数据的偏移量,count buy任务统计购买行为的个数,coun cart统计加购行为的个数。

图2,触发checkpoint,JobManager会向每个数据源发送一个新的checkpoint编号,以此来启动检查点生成流程。

图3,当Source任务收到消息后,会停止发出数据,然后利用状态后端触发生成本地状态检查点,并把该checkpoint barrier以及checkpoint id广播至所有传出的数据流分区。状态后端会在checkpoint完成之后通知任务,随后任务会向Job Manager发送确认消息。在将checkpoint barrier发出之后,Source任务恢复正常工作。

图4,Source任务发出的checkpoint barrier会发送到与之相连的下游算子任务,当任务收到一个新的checkpoint barrier时,会继续等待其他输入分区的checkpoint barrier到来,这个过程称之为barrier 对齐,checkpoint barrier到来之前会把到来的数据线缓存起来。

图5,任务收齐了全部输入分区的checkpoint barrier之后,会通知状态后端开始生成checkpoint,同时会把checkpoint barrier广播至下游算子。

图6,任务在发出checkpoint barrier之后,开始处理因barrier对齐产生的缓存数据,在缓存的数据处理完之后,就会继续处理输入流数据。

图7,最终checkpoint barrier会被传送到sink端,sink任务接收到checkpoint barrier之后,会向其他算子任务一样,将自身的状态写入checkpoint,之后向Job Manager发送确认消息。Job Manager接收到所有任务返回的确认消息之后,就会将此次检查点标记为完成。

使用案例

  1. StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); 
  2.  
  3. // checkpoint的时间间隔,如果状态比较大,可以适当调大该值 
  4. env.enableCheckpointing(1000); 
  5. // 配置处理语义,默认是exactly-once 
  6. env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE); 
  7. // 两个checkpoint之间的最小时间间隔,防止因checkpoint时间过长,导致checkpoint积压 
  8. env.getCheckpointConfig().setMinPauseBetweenCheckpoints(500); 
  9. // checkpoint执行的上限时间,如果超过该阈值,则会中断checkpoint 
  10. env.getCheckpointConfig().setCheckpointTimeout(60000); 
  11. // 最大并行执行的检查点数量,默认为1,可以指定多个,从而同时出发多个checkpoint,提升效率 
  12. env.getCheckpointConfig().setMaxConcurrentCheckpoints(1); 
  13. // 设定周期性外部检查点,将状态数据持久化到外部系统中, 
  14. // 使用该方式不会在任务正常停止的过程中清理掉检查点数据 
  15. env.getCheckpointConfig().enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION); 

总结

本文首先从Flink的状态入手,以图解加文字的形式详细解释了Flink的checkpoint机制,并给出了使用Checkpoint时的程序配置。

 

责任编辑:武晓燕 来源: 大数据技术与数仓 Checkpoint 机制Flink

(责任编辑:综合)

    推荐文章
    • 先用后付不还会封号吗 先用后付逾期过后能不能恢复?

      先用后付不还会封号吗 先用后付逾期过后能不能恢复?不少消费者在购物的时候会有一个心理:这款商品看着还行,但是万一我买了感觉质量不好或者不合适怎么办?为了解决用户心理,很多电商平台推出了先用后付的功能。先用后付不还会封号吗?先用后付逾期过后怎么恢复?先 ...[详细]
    • 江苏无锡:建立调研情况动态分析机制

      江苏无锡:建立调研情况动态分析机制    科技日报无锡1月16日电 实习记者李诏宇 通讯员陈菁菁 孙嘉隆)记者16日从江苏无锡市委主题教育办了解到,自第二批主题教育开展以来,该市已有814个调研课题实现成果有效转化。无锡市围绕医药产业 ...[详细]
    • AI设计电池,用锂量可减少70%

      AI设计电池,用锂量可减少70%一位研究人员正在测试人工智能设计的新材料电池。本报讯 人工智能AI)可以加速寻找和测试新材料的进程。近日,微软的研究人员利用AI设计出一种新电池,大幅降低了对昂贵的矿物锂的依赖。锂离子电池为我们日常使 ...[详细]
    • Keep股价较上市时跌去近八成

      Keep股价较上市时跌去近八成服务同质化严重 市场质疑盈利可持续性1月15日,Keep宣布与OPPO达成了战略合作,计划在硬件、AI大模型等领域展开深度合作。受消息带动,1月16日Keep股价开盘后小幅冲高,但随后回落,收盘较上一 ...[详细]
    • 海外客商抢抓中国新春机遇 境外消费回流对进口消费产生一定带动作用

      海外客商抢抓中国新春机遇  境外消费回流对进口消费产生一定带动作用哥斯达黎加的雨林水、斯洛伐克的水晶杯、南非的牛排、斯洛文尼亚的南瓜籽油……今年红火的中国新春消费市场吸引了一批海外客商,这些“全球年货搬运工”全年不 ...[详细]
    • 雷军称小米汽车SU7尾标已修改 感谢大家支持和关心

      雷军称小米汽车SU7尾标已修改 感谢大家支持和关心雷军称小米汽车SU7尾标已修改 感谢大家支持和关心【CNMO新闻】1月16日晚,CNMO注意到,小米创办人,董事长兼CEO雷军发文称,小米SU7预发布后,大家提了很多建议,感谢大家支持和关心,我们会逐 ...[详细]
    • 投行遇冷,高盛2023年净利润85亿美元创近四年新低

      投行遇冷,高盛2023年净利润85亿美元创近四年新低图片来源:视觉中国)全球知名投行高盛集团(Goldman Sachs)发布2023年第四季度财报。从业务数据来看,高盛去年四季度营收达到113.2亿美元,高于预期的108亿美元;净利润大涨51%至20 ...[详细]
    • 袋獾衰退影响次级竞食者遗传特征

      袋獾衰退影响次级竞食者遗传特征本报讯 科学家发现,由一种传染性癌症导致的顶级捕食者袋獾的种群衰退,可能正在影响次级捕食物种斑尾袋鼬的演化遗传。相关研究1月9日发表于《自然-生态与演化》。顶级捕食者的种群衰退在生态学上具有级联效应, ...[详细]
    • 分期乐提额没有公积金怎么办 具体方法有哪些?

      分期乐提额没有公积金怎么办 具体方法有哪些?分期乐是采用先授信再借钱模式,借款人出了额度才能借钱,如果对额度不满意还可以向分期乐申请提额,像有公积金的可以认证公积金提额。不过并不是每个人都有交公积金,那么分期乐提额没有公积金怎么办?这里就给大家 ...[详细]
    • 实现啤酒花活性成分黄腐醇高效生物合成

      实现啤酒花活性成分黄腐醇高效生物合成本报讯见习记者孙丹宁)中国科学院大连化学物理研究所研究员周雍进团队以酿酒酵母为宿主,通过强化和平衡生物合成途径、提高限速步骤异戊烯基化的转换效率,实现了黄腐醇又名黄腐酚)异源生物合成。相关研究成果近日 ...[详细]
    热点阅读