简单总结:Flink和Kafka是如何做到精准一致性的

news2024/9/22 11:32:18

Flink CheckPoint机制

CheckPoint本质上就是检查点,类似于玩游戏的时候,需要偶尔存档,怕家里断电导致自己白玩。
在这里插入图片描述

Flink也是一样的,机器也是可能宕机,那么Flink如何保证自身不受宕机影响呢?

一般来说,存档有两种策略,一种是“随时”,即处理完一条数据就存档一次,这样保证了数据的高可用,但是会对系统带来巨大的性能损失,而且机器宕机是一个小概率事件。

另外一种就是周期性存档,即每过一段事件,就存档一次,flink采用的就是这种


听起来很简单,但还有一个问题,周期性触发存档的时候,如果正好在处理一个数据,这时候怎么办?

  • 停止处理数据,进行存档:这种是肯定不行的,因为任务正在处理,你不知道处理到什么状态了,你只能把所有的状态信息都存下来,这很麻烦的。
  • 把正在处理的数据处理完,再进行存档:这听起来不错,但是分布式系统的节点之间需要通过网络通信来传递数据,如果我们保存检查点的时候刚好有数据在网络传输的路上,那么下游任务是没法将数据保存起来的;故障重启之后,我们只能期待上游任务重新发送这个数据。然而上游任务是无法知道下游任务是否收到数据的,只能盲目地重发,这可能导致下游将数据处理两次,结果就会出现错误。

怎么解决?

我们的策略是:当所有任务都恰好处理完一个相同的输入数据的时候,将它们的状态保存下来。首先,这样避免了除状态之外其他额外信息的存储,提高了检查点保存的效率。
其次,一个数据要么就是被所有任务完整地处理完,状态得到了保存;要么就是没处理完,状态全部没保存:这就相当于构建了一个“事务”(transaction)。如果出现故障,我们恢复到之前保存的状态,故障时正在处理的所有数据都需要重新处理;所以我们只需要让源(source)任务向数据源重新提交偏移量、请求重放数据就可以了。这需要源任务可以把偏移量作为算子状态保存下来,而且外部数据源能够重置偏移量;

Kafka 就是满足这些要求的一个最好的例子,比如下面,我们以一个wordCount任务流程为例,一个正常的检查点保存机制是怎样的:

在这里插入图片描述

源任务处理了三条数据,下游任务也完成了对这三条数据的处理,所以符合我们的策略(当所有任务都恰好处理完一个相同的输入数据的时候,进行存档)


我们来看下故障状态下的处理流程,当源任务又完成处理了2条数据时,偏移量变成了5,但是在求和任务时,宕机了,这时候根据我们的策略,这2条数据没有被所有的数据完成,那么我们就不会在外部存储我们的状态
在这里插入图片描述
即我们已经持久化保存的状态是这样的:
在这里插入图片描述

当应用重启的时候,我们根据这个检查点状态进行恢复就可以,但是这样有个问题,对源算子来说,任务已经完成,4,5偏移量对应的数据已经给你下游发过去了,我又不知道你失败了

这种情况下我们的策略就很有优势,我们只需要根据检查点保存的偏移量,重置上游数据源任务的偏移量,要求进行重放数据就可以。

所以,如果要保证精准一次性,上游组件必须支持数据重放,kafka就支持。

现在来看,文章标题是不是就明白了。

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

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

相关文章

python小案例——采集财经数据

前言 大家早好、午好、晚好吖 ❤ ~ 另我给大家准备了一些资料,包括: 2022最新Python视频教程、Python电子书10个G (涵盖基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题)、Python学习路线图等等 全部可在文末名片获取哦&…

MATLAB算法实战应用案例精讲-【人工智能】语义分割(补充篇)(附实战应用案例及代码)

前言 语义分割作为计算机视觉领域的关键任务,是实现完整场景理解的必经之路。为了让机器拥有视觉,要经过图像分类、物体检测再到图像分割的过程。其中,图像分割的技术难度最高。 越来越多的应用得益于图像分类分割技术,全场景理解在计算机视觉领域也至关重要。其中一些应…

强大的ANTLR4(3)--算术表达式

下面要构建一个简单的计算器,规则如下: 1)可以由一系列语句构成,每条语句由换行符终止 2)一条语句可以是表达式、赋值语句或空行 3)可以有加减乘除、小括号以及变量出现 例如,文件名t.expr的内…

【Java】PriorityQueue梳理

【Java】PriorityQueue梳理 简介 PriorityQueue是优先队列的意思。优先队列的作用是能保证每次取出的元素都是队列中权值最小的。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过…

linux的例行性工作

一,单一执行的例行性工作 定时任务,将来的某个时间点执行 使用单一理性工作的命令:at -> atd 命令 服务名 查看atd状态,看有没有这个服务,查看结果为有 我们使用 at 命令来生成所要运行的工作,并将…

Taro+nutui h5使用nut-signature 签名组件的采坑记录

近期在使用Taro(“tarojs/taro”: “3.4.0-beta.0”) Nutui (3.1.16)开发H5时,需要一个签名功能结果在小程序上运行正常的 nut-signature组件,在h5上出问题了 首先问题是 : Nutui的 签名组件(nut-signature&#xff…

加解密与HTTPS(3)

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~ 除了对称加密算法和非对称加密算法,再就是最后的一种加密算法了:不可逆加密算法。 对称加密算法和非对称加密算法在处理明文的过程中需要…

线程池ThreadPoolExecutor的源码中是如何解决并发问题的?

ThreadPoolExecutor面临哪些线程安全问题 ThreadPoolExecutor俗称线程池,作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务。 然而为高效并发而生ThreadPoolExe…

C++项目实战:职工管理系统

1.管理系统的要求 系统可以管理公司内部所有员工的信息 主要使用c实现一个基于多态的职工管理系统 公司中的职工分为三类:普通员工、经理、老板,显示信息时需要显示职工编号、职工姓名、职工岗位以及职责 普通员工职责:完成经理安排的各项任…

oh my 毕设-人体姿态估计综述

文章目录What is Human Pose Estimation?Classical vs. Deep Learning-based approachesClassical approaches to 2D Human Pose EstimationDeep Learning-based approaches to 2D Human Pose EstimationHuman Pose Estimation using Deep Neural NetworksOpenPoseAlphaPose (…

想要努力赚钱,培养四种基础能力

这四种基础能力分别是:认知力、学习力、执行力、复盘力。我们的认知和思维,很大程度上,都是由所处的环境和圈子决定的。在同一个环境和圈子里面呆久了,你的认知就会被固化了。穷人最根本的枷锁,不是缺乏资金&#xff0…

excel图表技巧:看看,这个饼图象不象罗盘?

说到制作柱形图、条形图、饼图,相信大家都没有问题,直接选中数据,再插入对应的图表就行了,可如果要制作一张双层饼图你还会吗?“啥?还有双层饼图?”嘿嘿,不知道了吧,双层…

PVE+NUT+群晖等配置

文章目录配置文件说明默认配置(翻译的)ups.conf(设置ups通信相关)upsd.conf(设置ups客户访问的相关信息)upsd.users(设置upsd用户)nut.conf(nut的配置,主要是模式,决定使用哪些文件)upsmon.confupssched.confupssched-cmd官方手册写的可以的文章只需要实现&#xff…

excel数据查找:内容查找统计的函数公式

判断单元格是否包含特定内容是平时工作中经常会遇到的一类问题,常见于包含备注信息的表格中。例如下面这个考勤汇总表,需要根据备注中的内容判断该员工是否存在加班的情况,就属于这类问题。 遇到这类问题该如何处理,常用的公式做法…

klee2.3 教程1-2

1. klee2.3 安装 system:unbuntu 20.04 note: llvm-13klee2.3z3-4.10 1.1 install dependencies KLEE 需要 LLVM 的所有依赖项(请参阅此处),以及更多。特别是,您应该安装下面列出的程序和库。graphviz/doxygen是可…

初级C语言之【操作符】

🦖作者:学写代码的恐龙 🦖博客主页:学写代码的恐龙博客主页 🦖专栏:【初级c语言】 🦖语录:❀未来的你,一定会感谢现在努力奋斗的自己❀ 初级C语言之【操作符详解】一&am…

综合能源系统分析的统一能路理论(三):《稳态与动态潮流计算》(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

spring6笔记3(bean的循环依赖,手写spring框架,ioc注解开发,JdbcTemplate)

第九章、Bean的循环依赖问题 9.1 什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你,你也依赖我。 比如:丈夫类Husband,妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。 public class Husband…

【java线程池详解】

java线程池详解线程的基本状态Executor框架Executor框架组成部分Executor框架使用示意图Runnable接口、Callable接口ExecutorsFuture接口和实现Future接口的FutureTask类Future和FutureTask的关系ThreadPoolExecutor类ThreadPoolExecutor 饱和策略(拒绝策略&#xf…

MySQL去重,一条SQL语句完美解决【去重留一】

此处以某消费记录表(consume_record)为例,SQL语句如下: DELETE consume_record FROM consume_record, ( SELECT min(id) id, user_id, monetary, con…