Flink基础原理

news2025/7/22 5:20:56

一、Flink的概述

我感觉就是一个实时的流处理程序,可以实时的从数据源读取数据,然后根据设置好的一系列算法,
对数据进行处理,最终输出到目的存储介质(数据库、缓存等)中去,和jdk1.8里面的数据流处理很像,
也有并行流、map、fifter等处理。

二、Flink的基础架构

(1)、流程
	
		flink client(客户端)提交job到jobManager上,这一步实际上就会对我们提交的程序进行一次解析,
		解析成StreamGraph ,然后优化成JobGraph。
		也就是最基本的数据流程图,从数据源—中间一系列的算法——存储。
		
		jobManager里面包含两个组件,一个是JobMaster 一个是ResourceManager(资源管理器)。
		JobMaster 负责处理单独的作业(Job),负责将JobGraph转换成一个物理层面的数据流图(ExecutionGraph)。
		ExecutionGraph相对于JobGraph来说,就是具体到了每个算子在哪些taskManager上的slot上执行。
		
		同时JobMaster还要向ResourceManager去请求资源,ResourceManager按照配置生成多个taskManager,
		每个taskManager向ResourceManager上注册slot。
		也就是告诉ResourceManager每个taskManager有多少个插槽。
		
		JobMaster 请求到资源之后,就会将job分解成subtask提交到每个taskManager的多个slot上执行,
		slot实际上就是对taskManager进行了内存划分,taskManager就是一个jvm进程。

在这里插入图片描述

(2)、数据流图的优化和解析过程

第一步在flink client上会按照程序里面的逻辑解析成StreamGraph (数据流图),对整个task任务做一个总体的描述。

在这里插入图片描述

第二步,由flinkClient依据StreamGraph 进行优化,将数据不需要跨taskmanager进行分组聚合等操作的(One-to-One关系),比较简单的直接流向后一个算子的这种,合并成一个subtask。也就是优化过后的JobGraph。

在这里插入图片描述

第三步,由JobMaster 将JobGraph进行并行化解析,也就是根据每个算子的并行度进行描述。
在这里插入图片描述

(3)、Task slot

	flink的TM就是运行在不同节点上的JVM进程,每个进程会拥有一定量的资源。
	比如内存,cpu,网络,磁盘等。flink将进程的内存进行了划分到多个slot中.比如2个TaskManager,每个TM有3个slot的,每个slot占有1/3的内存。

在这里插入图片描述
内存被划分到不同的slot之后的好处:

<1>、TaskManager最多能同时并发执行的任务是可以控制的,那就是3个,因为不能超过slot的数量。
<2>、slot有独占的内存空间,这样在一个TaskManager中可以运行多个不同的作业,作业之间不受影响。
<3>、slot之间可以共享JVM资源, 可以共享Dataset和数据结构,也可以通过多路复用

槽slot共享:
在这里插入图片描述
允许同一个job下的subtask(子任务,也就是分解出来的各个算子)可以共享slot,这样可以使得同一个slot运行整个job(每个task)的流水线(pipleline)

好处有点和java里面的fork-join多线程框架有点像,都是可以最大程度的利用空闲资源进行任务执行。

上面图片中有两个 Task Manager,每个 Task Manager 有三个 slot,这样算子最大并行度那么就是 6 个,在同一个 slot 里面可以执行多个子任务(subtask,并且有些算子进行了优化,合并为了一个subtask)。
source/map/keyby/window/apply 最大可以有 6 个并行度,sink 只用了 1 个并行度。
一般 slot 数是每个 TaskManager 的 cpu 的核数。

三、Flink如何保证数据精确一次性

状态只持久化一次到最终的存储介质中,实现原理实际上和kafka的消费者保持最终一致性很像。
也就是每次计算之后,存储到最终的介质上才算计算成功,才会把当前的数据更新到checkponit。
如果中途出了问题,重试的时候会从checkponit(类似于kafka的offest)重新开始。
一个完整的流计算,在每个阶段的算子都会上报barrier,更新checkponit的依据是:sink都上报了barrier

在这里插入图片描述

四、Flink背压

在这里插入图片描述
实际上就是每个算子的读写操作都有自己的有界阻塞队列,满了就堵住呗,形成连锁反应一直堵到源头。

在这里插入图片描述
远程通信用的Netty,底层是TCP Socket来实现的,从宏观的角度看,多个TaskManager只不过多了两个Buffer(缓冲区)

只要InputGate的LocalBuffer被打满,Netty Buffer也迟早被打满,而Socket Buffer同样迟早也会被打满(TCP 本身就带有流量控制),再反馈到ResultPartition上,数据又又又发不出去了…导致整条数据链路都存在反压的现象。

一个TaskManager的task有多个,共用一个TCP Buffer/Buffer Pool,那只要其中一个task的链路有问题,会导致整个TaskManager跟着挂。
所以在实际的处理中用了credit机制,简单理解为以「更细粒度」去做流量控制,通过InputGate和ResultPartition来做阻塞队列。

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

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

相关文章

实验八 数据处理与多项式处理(matlab)

实验八 数据处理与多项式处理 1.1实验目的 1.2实验内容 1.3流程图 1.4程序清单 1.5运行结果及分析 1.6实验的收获与体会 1.1实验目的 1&#xff0c;掌握数据统计和分析的方法&#xff1b; 2&#xff0c;掌握数值插值与曲线拟合的方法&#xff1b; 3&#xff0…

如何使用 .Net Core 实现数据库迁移 (Database Migration)

当我们在编写基于数据库的应用程序时&#xff0c;随着需求的增加和改变&#xff0c;我们需要升级我们的数据库&#xff0c;变更数据库表的字段&#xff0c;当我们的系统的不同版本被部署到了不同的客户那里&#xff0c;在需要给客户升级时&#xff0c;我们如何实现数据库模式 (…

注解和反射

注解和反射注解元注解反射注解 注解和注释的区别 注解 annotation写在程序之中&#xff0c;程序可以识别&#xff0c;做出相应的动作处理&#xff0c;具有检查和约束程序的作用 注释 comment 写在程序之中&#xff0c;供人参考&#xff0c;提示使用&#xff0c;程序会自动忽…

云原生系统学习[Kubernetes]——02 Pod、Deployment、Service

云原生系统学习[Kubernetes]——02 Pod、Deployment、Service [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9RomXCf-1668486830453)(./assets/image-20221103113345300.png)] 参考资料 什么是YAMLk8s官网文档k8s中文社区k8s-book 学多少&#…

Java:继承和多态

文章目录前言一、继承1.继承概念1.1 继承的语法1.2 父类成员方法1.2.1 子类访问父类的成员变量1.2.2 子类访问父类的成员方法1.3 super、this 关键字1.4 子类构造方法1.5 继承的方式1.6 final 关键字1.7 继承与组合二、多态2.1 多态的概念2.2 多态实现的条件2.3 对重写的认识2.…

Canvas 基础使用

一、基本的画布功能 创建 <canvas>元素时至少要设置 width 和 height 属性&#xff0c;这样才能告诉浏览器在多大面积上绘图。出现在标签包裹里的内容会在浏览器不支持 <canvas>元素时显示。比如&#xff1a; <canvas id"drawing" width"200&q…

PumpkinBook Reading(一)

绪论 基本术语 “算法”是指从数据中学得“模型”的具体方法&#xff0c;“算法”产出的结果称为“模型”&#xff0c;通常是具体的函数或者可抽象地看作为函数。 样本&#xff1a;也称为“示例”&#xff0c;是关于一个事件或对象的描述。因为要想让计算机能对现实生活中的事…

【Python开发】Flask开发实战:个人博客(三)

Flask开发实战&#xff1a;个人博客&#xff08;三&#xff09;在【Python开发】Flask开发实战&#xff1a;个人博客&#xff08;一&#xff09; 中&#xff0c;我们已经完成了 数据库设计、数据准备、模板架构、表单设计、视图函数设计、电子邮件支持 等总体设计的内容。 在【…

公众号裂变拉新,以婴儿辅食为诱饵,实现低成本获客!

大家好~我是娜娜 今天来给大家拆解一个关于食品行业精选公众号增长案例&#xff0c;通过公众号裂变拉新&#xff0c;任务拉新人数5000&#xff0c;留存率达到85%&#xff0c;活动裂变率达到1100.86%。活动数据也还在持续的上升当中。 该公众号的目标人群是新手爸妈&#xff0…

【Java】SpringBoot应用简单示例

SpringBoot应用简单示例SpringBoot应用简单示例HelloWorld搭建项目ResponseBody的作用ComponentScan排除扫描beanSpringBoot集成日志SpringBoot日志初始化原理消息转换器拦截器过滤器操作数据库Spring Data JpaDruid数据源Mybatis-Plus事务处理操作缓存AOP相关概念栗子定时任务…

C语言解析JSON源码

它与 XML 的地位差不多&#xff0c;但就笔者而言&#xff0c;笔者更喜欢 JSON 的风格&#xff0c;因为它更符合我们的思维习惯&#xff0c;同样一份数据&#xff0c;JSON 格式的就是比 XML 要清晰明了一些。 最近笔者需要在 C语言 上解析 JSON 格式&#xff0c;在网上一顿找&am…

XC5VLX30T-2FF323I Virtex-5 LXT FPGA IC 产品参数

概述 Virtex-5 FPGA有-3&#xff0c;-2&#xff0c;-1速度等级&#xff0c;其中-3具有最高的性能。Virtex-5 FPGA直流和交流特性指定为商业和工业级别。除工作温度范围外&#xff0c;除非另有说明&#xff0c;所有直流和交流电气参数对于特定转速等级是相同的(即-1转速等级的工…

一夜登顶GitHub!字节内网数据结构与算法刷题笔记,看完直呼卧槽

网络上流传着一句段子“程序员两条腿&#xff0c;一条是算法&#xff0c;一条是英文&#xff0c;想跑的更远&#xff0c;这两条腿都不能弱”。英文&#xff0c;我们暂且不谈&#xff0c;我们先来谈谈算法。 算法之难&#xff0c;在于将精巧的逻辑&#xff0c;通过合适的数据结…

2 分钟,教你用 Serverless 每天给女朋友自动发土味情话

作者&#xff1a;安可 Serverless 简介 Serverless&#xff0c;中文意思是 “无服务器”&#xff0c;所谓的无服务器并非是说不需要依靠服务器等资源&#xff0c;而是说开发者再也不用过多考虑服务器的问题&#xff0c;可以更专注在产品代码上&#xff0c;同时计算资源也开始…

如何根据自己的SCI论文,匹配适合的期刊? - 易智编译EaseEditing

如何选择合适的目标期刊是需要慎重对待的问题&#xff0c;它决定了你论文的发表速度和被认可度。 可以遵循以下几个步骤来考虑&#xff1a; 1、从你论文的参考文献中选择合适的期刊&#xff08;如果引用文献较少&#xff0c;也可以从引文的参考文献中进行筛选&#xff09;&…

成功解决:ModuleNotFoundError: No module named ‘amp_C‘

在使用transformers时&#xff0c;在调用Trainer的时候遇到了这个问题&#xff0c;原因是apex包有问题&#xff0c; 这里有解决apex安装包的多一些教程 https://blog.csdn.net/Xidian185/article/details/122745427 https://blog.csdn.net/weixin_45225975/article/details/119…

倍福TwinCAT3中使用久同伺服

目录 一、测试设备说明 二、伺服通电和参数设置 1、恢复出厂参数设置 2、恢复出厂&#xff0c;重启后 3、伺服自己点动操作 4、增益、刚度调整 5、伺服零位设定 6、伺服转动一圈编码器脉冲量设定 7、参数保存 三、伺服操作面板 四、TwinCAT3工程配置 1、XML文件 2、…

【元宇宙欧米说】打造艺术与技术构建的交互式数字旅程

Web3 to Earn项目如何扩大应用功能和场景&#xff1f;在Web3时代怎么才能以更新颖、有趣的方式追赶潮流&#xff1f;各Web3领域项目及应用如何进行功能外延以满足用户需求&#xff1f; 11月17日晚上九点&#xff0c;ZenCats项目管理员Fred将以“打造艺术与技术构建的交互式数字…

编码格式转换方法

今天项目上遇到了需要将 SJIS(Shift-JIS) 格式与 UTF8 格式相互转换问题。 首先看一个编码格式问题引发的乱码现象&#xff0c;新建下面的文本文档&#xff0c;然后更名为 test.bat。 echo off echo test chinese character view 测试中文字符显示 pause双击运行 用 chcp 查…

正版授权| iObit Uninstaller 12 Pro 专业卸载器工具

前言 专业的Win系统卸载程序&#xff0c;它可以轻松删除不需要的程序&#xff0c;插件和Windows应用程序&#xff0c;还可以对电脑旧的应用一键更新。安装监视器会检测并记录安装中的所有系统更改&#xff0c;以确保在将来彻底卸载时可以还原所有更改。 功能特点 安装监视器 …