Flink原理(一)——基础架构
Flink系列博客,基于Flink1.6,打算分为三部分:原理、源码、实例以及API使用分析,后期等系列博客完成后再弄一个目录。
该系列博客是我自己学习过程中的一些理解,若有不正确、不准确的地方欢迎大伙留言分享。文中引用均已标注,若有侵权,请联系我,立马删除!
1、前言
在讲Flink基本结构之前,我们的先知道Flink是什么?中文官网上的解释是:Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算[1]。关于无边界和有边界数据流的定义可以参考官网上的解释,从其解释上可以了解到Flink是一个框架和计算引擎,是用来处理数据流的。处理数据流并不意味着Flink仅仅能用于我们通常所说的流处理系统中,这里数据流主要是为了说明Flink处理数据的方式,是以流的形式进行的。其实不仅流处理,Flink也可以做到批处理,即Flink可以实现批/流一体化,至于如何实现的,这里仅提及相关概念,后续博客会慢慢道来。
2、Flink基本架构
2.1、Flink的基本架构图[2]:
从图中可知,Flink整个系统主要由两个组件组成:JobManager、TaskManager组件,其架构是遵循主-从设计原则的,JobManager为master结点、TaskManager为Slave结点(也称work结点),组件之间的通信是借助Akka Framework。
1)JobManager:负责整个Flink集群任务的调度和资源分配。从client获取提交的任务后,JobManager根据TaskManager中资源(TaskSlots)使用的情况,分配资源并命令TaskManager启动任务。在这个过程中,JobManager会触发checkpoint操作,TaskManager执行checkpoint操作,其中所有的checkpoint协调的过程都在JobManager中完成的。此外,若是任务失败了,也由JobManager协调失败任务的恢复。
2)TaskManager:负责具体的任务执行和结点上资源申请和管理,多结点之间的数据交换也是在TaskManager上执行。Flink集群中,每个worker(taskManager)对应的是一个JVM进程。
换句话说,JobManager分配资源、任务,TaskManager拥有资源、启动任务。一般在生产环境中,JobManager和TaskManager所在结点应是分离的,其目的主要是为了保证TaskManager(基于内存的计算)不抢夺JobManager的资源。
3)client客户端:不是runtime的一部分,换句话说,Flink集群启动client提交的任务之后,client客户端时可以断开的,是可以不需要的。client不像JobManager和TaskManager对应着 flink集群中的结点(或是物理机、或是虚拟机、或是容器),是触发执行的一个抽象化,若程序在JobManager所在结点执行,则称client在JobManager结点上,同样,其也可以在TaskManager结点上。
提交一个任务的正常流程是:client与JobManager构建Akka连接,将任务提交到JobManager上,JobManager根据已经注册在JobManager中TaskManager的资源(TaskSlot)情况,将任务分配给有资源的TaskManager,并命令TaskManager启动任务,TaskManager则从JobManager接受需所部属的任务,使用slot资源启动task,建立数据接入的网络连接,然后接受数据并开始处理。
2.2、taskSlot
每个task slot是TaskManager的一部分,若一个taskManager有三个taskSlot,则这三个taskSlot会均分这个TaskManager的资源(仅内存,不包括CPU)。有多个slot意味着同一个JVM中会有多个子任务,这些任务会共享JVM的TCP连接和心跳信息。这里要说明的是,slot的个数不是subtask的个数是一一对应,一个slot中可以有多个subtask。在默认情况下,同一个job中的子任务(subtask)是可以共享一个slot的。这里涉及slot共享的概念,后续博客中分析。
参考:
[1]https://flink.apache.org/zh/flink-architecture.html
[2]https://ci.apache.org/projects/flink/flink-docs-release-1.6/concepts/runtime.html
Flink原理(一)——基础架构的更多相关文章
- MySQL运行原理与基础架构
1.MySQL基础 MySQL是一个开放源代码的关系数据库管理系统.原开发者为瑞典的MySQL AB公司,最早是在2001年MySQL3.23进入到管理员的视野并在之后获得广泛的应用. 2008年My ...
- Fabric基础架构原理(一)
Linux基金会于2015年12月启动了名为“超级账本”(Hyperledger)的开源项目,旨在推动各方协作,共同打造基于区块链的企业级分布式账本底层技术,用于构建支撑业务的行业应用和平台. 超级账 ...
- kubernetes基础架构及原理
kubernetes简称“k8s” 其中“8”代表的是“k”和“s”中间的8个字母. k8s是Google公司开发的Borg项目中独立出来的容器编排工具,然后将其捐献给CNCF这个组织,然后发扬光大. ...
- 流式处理新秀Flink原理与实践
随着大数据技术在各行各业的广泛应用,要求能对海量数据进行实时处理的需求越来越多,同时数据处理的业务逻辑也越来越复杂,传统的批处理方式和早期的流式处理框架也越来越难以在延迟性.吞吐量.容错能力以及使用便 ...
- Flink提交流程和架构
一.Flink提交任务的流程 Flink任务提交后,Client向HDFS上传Flink的jar包和配置,之后向Yarn ResourceManager提交任务,ResourceManager分配Co ...
- IT基础架构规划方案之实际网络设计案例
根据某集团总部新办公大楼.厂房和分支机构(店面)的情况,以及IT部门对网络节点数.网络应用和分支机构(店面)的初步规划,对企业的总体网络拓扑结构进行设计,如下图. 设备选型和部署参考: 类型 设备选型 ...
- b2c项目基础架构分析(一)b2c 大型站点方案简述 已补充名词解释
我最近一直在找适合将来用于公司大型bs,b2b b2c的基础架构. 实际情况是要建立一个bs架构b2b.b2c的网站,当然还包括wap站点.手机app站点. 一.现有公司技术人员现状: 1.熟悉asp ...
- 虚拟桌面基础架构(VDI)与终端服务和传统PC对比
VDI(Virtual Desktop Infrastructure),即虚拟桌面基础架构,正迅速成为一个热门词汇,它将颠覆企业向终端用户交付应用的游戏规则.这篇专题就是想通过VDI与两种传统技术的对 ...
- WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构
原文:WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构 细算起来,已经有好几个月没有真正的写过文章了.近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析>的写作,一直 ...
- linux通用邻居基础架构
1.为每一个协议提供一个缓存来存放L3到L2的转换结果. 2.提供在缓存中添加.删除.改变和查找一个特定映射项的函数.查找函数必须要快,因为它会影响整个系统的性能. 3.为每一个协议缓存的数据项提供一 ...
随机推荐
- mybatis 枚举typeHandler
枚举typeHandler 在绝大多数情况下,typeHandler因为枚举而使用,MyBatis已经定义了两个类作为枚举类型的支持,这两个类分别是: •EnumOrdinalTypeHandler. ...
- win8(x64)下,重新安装delphi 2007时出现“Invalid Serial Number”,如何解决?
1)在添加删除程序里卸载delphi 2007 2)删除C:\ProgramData\CodeGear 3)删除C:\Program Files (x86)CodeGear 4)删除d:\Progra ...
- Ubuntu与Window双系统安装的注意事项
UBUNTU与WINDOW双系统安装的注意事项 Ubuntu与Window双系统安装的注意事项 由 匿名 (未验证) 提交于 2019-05-18 10:07:41 登录 发表评论 29 次浏览 ...
- 最新 苏州朗动java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.苏州朗动等10家互联网公司的校招Offer,因为某些自身原因最终选择了苏州朗动.6.7月主要是做系统复习.项目复盘.Leet ...
- input回退禁止
//处理键盘事件 禁止后退键(Backspace)密码或单行.多行文本框除外 function forbidBackSpace(e) { var ev = e || window.event; //获 ...
- (模板)hdoj1251(字典树模板题)
题目链接:https://vjudge.net/problem/HDU-1251 题意:给定一系列字符串之后,再给定一系列前缀,对每个前缀查询以该字符串为前缀的字符串个数. 思路: 今天开始学字典树, ...
- 定时任务-SQL Server代理 作业
创建一个sqlserver作业 sqlserver的作业的功能更加偏向于数据库,处理数据,迁移等.当然也可以调用接口(存储过程调用接口 https://www.cnblogs.com/cynchan ...
- AVR单片机教程——点亮第一个LED
做了这么多准备,我们终于可以开始用开发板做点事了. 单片机编程与计算机编程有一些不同点.程序都要有零个或多个输入.一个或多个输出,这是两者都有的,但是计算机编程的输入输出主要靠控制台,而单片机没有. ...
- Scratch编程与高中数学算法初步
scratch编程与高中数学算法初步 一提到编程,大家可能觉得晦涩难懂,没有一定的英语和数学思维基础的人,一大串的编程代码让人望而步,何况是中小学生. Scratch是一款由麻省理工学院(MIT) ...
- Vue组件全局/局部注册
全局注册 main.js中创建 Vue.component('button-counter', { data: function () { return { count: 0 } }, templat ...