Flink的检查点算法

Flink的恢复机制基于应用状态的一致检查点。在有状态的流应用中,一个一致性检查点是:在所有tasks处理了一个(相同的)输入后,当前时间点每个task的state副本。

在为application做一个一致性检查点时,一个基本的朴素算法机制如下步骤:

  1. 暂停所有输入流的消费。
  2. 等待所有未被处理的data完全被处理,表示所有tasks已经处理了它们所有的输入数据。
  3. 做检查点:复制每个task的state到一个远端持久性存储。在所有tasks完成了它们的副本后,检查点完成。
  4. 恢复消费输入流。

实际上Flink并不是基于上述朴素检查点算法,而是基于Chandy-Lamport算法(用于做分布式快照)实现了检查点机制。此算法并不停止整个应用的运行,而是将做快照的操作从流处理解耦出来,这样一些tasks可以持续运行,而其他tasks可以持久化它们的状态。实现原理:

  1. 使用了一个特殊的record类型,称为一个检查点分界(checkpoint barrier)。检查点barriers由source operator注入到常规的流记录中,任务向下游所有分区广播该检查点分界。
  2. 任务收到上游分区的barrier后,缓存该分区barrier后的records,直到所有上游分区的barrier都收到后,向JM确认(Acknowledge),在state backend保存检查点,然后广播barrier到该任务的下游tasks。该机制称为alignment机制。
  3. 检查点 barriers 到达一个sink task。它会做一个barrier 调整(alignment),给它自己的状态做检查点,并向JM确认它已收到barrier。JobManager在收到一个application的所有task发送的checkpoint acknowledge后,它会记录:此application的检查点完成。
  4. 一个source发出的每个分区的数据是FIFO的,保证barrier无法被其他records赶超。多个source或分区的数据顺序由任务的alignment机制保证顺序。
  5. 每个检查点barrier会携带一个检查点ID,用于辨别它属于哪个检查点,并且将一个流在逻辑上分成两部分。

应用恢复到检查点状态的步骤:

  1. 重启整个application。
  2. 重置所有stateful tasks的状态为最近的检查点。
  3. 恢复所有tasks的处理。

数据源是否支持重置取决于它的实现(CDC连接器),以及流被消费的源头。例如,Kafka可以提供一个流中当前偏移量之前的records,从socket消费的,则无法被重置,因为sockets在消费完一个数据后会将它丢弃。因此,一个application在仅当所有输入流是由可重置的 data sources 消费时,它才能够以 exactly-once state 一致性的方式运行。

Flink的检查点与恢复机制仅重置一个流应用的internal state。在恢复时,取决于应用的sink operator的不同,一些records可能会多次释放给下游的流,例如一个event log,一个文件系统,或是一个数据库。对于某些存储系统,Flink的sink 函数可以提供 exactly-once 输出,例如,在检查点完成时才提交释放的records。另一个适用于大部分存储系统的方法是:幂等更新(idempotent updates)。

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

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

相关文章

PDF.js实现搜索多个不同的关键词高亮显示效果

static\PDF\web\viewer.js 392行左右 // 自定义搜索关键词---------------------------------------- this.searchKeywords = keyword => {if (typeof PDFViewerApplication !== undefined) {PDFViewerApplication.eventBus.dispatch(find, {query: keyword,caseSensitive:…

代码随想录算法训练DAY22|二叉树8

算法训练DAY22|二叉树8 235. 二叉搜索树的最近公共祖先 力扣题目链接(opens new window) 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点…

PEFT: 在低资源硬件上对十亿规模模型进行参数高效微调

1 引言 最近,深度学习的研究中出现了许多大型预训练模型,例如 GPT-3、BERT 等,这些模型可以在多种自然语言处理任务中取得优异的性能表现。而其中,ChatGPT 模型因为在对话生成方面的表现而备受瞩目,成为了自然语言处理…

sublime text 3 分屏和关闭分屏

有时候需要编辑多个地方的代码,开多个编辑器又太麻烦,那么Sublime自带的分屏快捷键可以解决烦恼。 Altshift2 分为2列 Altshift3 分为3列 Altshift4 分为4列 Altshift5 分为2行2列 Altshift8 分为2行 Altshift9 分为3行 取消分屏:Alts…

Linux系统报错锦集二: engine libaio not loadable

OS:RedHat 9.1 场景:fio 测试 背景:初次使用fio进行IO性能测试,但RedHat不能直接yum安装fio,故github上下载了fio的源码包,configure、make、make install 编译安装。 fio多线程需要libaio引擎&#xff…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建一个TcpConnection实例 以及 接收客户端数据

#CSDN 年度征文|回顾 2023,赢专属铭牌等定制奖品# 一、主线程反应堆模型的事件添加和处理详解 >>服务器和客户端建立连接和通信流程: 基于多反应堆模型的服务器结构图,这主要是一个TcpServer,关于HttpServer,…

分布式协调系统

分布式协调系统 分布式协调系统解决的进程间的通信和协作,根据是否在同一时间和是否相互引用分为四个模型。 示例系统Chubby 主功能:让客户端实现同步,方法是加锁服务 介绍一下系统: 系统由五台服务器构成,通过pax…

智慧地球(AI•Earth)社区成立一周年啦!独家福利与惊喜彩蛋等你来拿!

原文:智慧地球(AI•Earth)社区成立一周年啦! 智慧地球社区 一周年庆典🎊 独家福利🎁与惊喜彩蛋🎉等你来拿! 智慧地球(AI•Earth)社区自2023年1月11日建立以…

app store里面的构建版本在线上传

开发苹果ios应用,无论是用原生开发、用hbuilderx开发还是用其他h5框架开发的app,都需要将打包好的ipa文件上传到app store。 在上架app store的过程中,我们会遇到下图的这样一个问题: 就是它要求我们上传一个构建版本&#xff0c…

如何保障开放网络边界安全?

针对开放式网络(办事大厅、视频网络等),如何在内部网络构建起一道安全屏障,有效解决广大用户普遍存在的无法保证网络边界完整、边界安全、公共场所终端摄像头管理、办事大厅智能设备(一体机等)管理、开放场…

【C语言】Linux实现高并发处理的过程

一、实现高并发的几种策略 C语言本身并没有内建的多线程支持(新版C语言支持,但用得不多),但是在多数操作系统中,可以使用库来实现多线程编程。例如,在POSIX兼容系统上,可以使用 pthreads 库来创…

django学习:页面渲染与请求和响应

1.请求过程 2.页面渲染 在app中新建一个目录(Directory),文件名命名为templates。该文件名命名是固定的,不可命名出错,如若后续步骤出错,该目录文件名是一个检查的重点项目。在该目录下新建一个html文件&a…

探讨一下WebINFO 下的一些思考

在平时的开发中,我们经常看到一个/WEB-INF 这个目录,这个是web 容器初始化加载的一个标准路径。官方解释:WEB-INF 是 Java 的 web 应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。也就是说,这…

MySQL之视图内连接、外连接、子查询

一、视图 1.1 含义 虚拟表,和普通表一样使用 视图(view)是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,数据库中只存放了视图的定义,而并没有存放…

Jmeter二次开发实操问题汇总(JDK问题,jar包问题)

前提 之前写过一篇文章:https://qa-lsq.blog.csdn.net/article/details/119782694 只是简单尝试了一下生成一个随机手机号码。 但是如果在工作中一个实际场景要用的二次开发,可能会遇到一些问题。 比如这样一个场景: Mobile或者前端调用部分…

地理空间分析1——入门Python地理空间分析

写在开头 地理空间分析是一门涉及地球表面数据处理和解释的科学,通过对地理现象的研究,我们可以更深入地了解地球各个角落的关系。Python作为一种功能强大的编程语言,在地理空间分析领域展现了强大的潜力。本文将带您深入了解入门级别的Pyth…

如何评判一款智能酒精壁炉品质是否优秀

在当今家居设计中,智能酒精壁炉作为一种独特的取暖和装饰方式,受到越来越多人的青睐。然而,如何挑选和选择优质的智能酒精壁炉成为了一个重要的话题,下面将深入探讨哪样的智能酒精壁炉才算得上是品质卓越。 优质的智能酒精壁炉通常…

Guarded Suspension模式--适合等待事件处理

Guarded是被守护、被保卫、被保护的意思, Suspension则是暂停的意思。 如果执行现在的处理会造成问题, 就让执行处理的线程进行等待--- 这就是Guarded Suspension模式。 模式通过让线程等待来保证实例的安全性。 一个线程ClientThread会将请求 Request的…

AWS EKS1.26+kubesphere3.4.1

1、前提准备 1台EC2服务器Amazon Linux2,设置admin的角色 安装 aws cli V2 ​ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"unzip awscliv2.zipsudo ./aws/installexport PATH/usr/local/bin:$PATHsou…

Multisim各版本安装指南

Multisim下载链接 https://pan.baidu.com/s/1En9uUKafhGOqo57V5rY9dA?pwd0531 1.鼠标右击【Multisim 14.3(64bit)】压缩包(win11及以上统需先点击“显示更多选项”)选择【解压到 Multisim 14.3(64bit)】。 2.打开解压后的文件夹,双击打开【…