参考链接:https://blog.csdn.net/dajiangtai007/article/details/88575553

1、Flink 运行时架构

Flink 运行时架构主要包含几个部分:Client、JobManager(master节点)和TaskManager(slave节点)。

一、

Client:Flink作业在哪台机器上面提交,那么当前机器称之为Client。用户开发的Program 代码,它会构建出 DataFlow graph,然后通过Client提交给JobManager。

JobManager:是主(master)节点,相当于YARN里面的ResourceManager,生产环境中一般可以做HA高可用。

JobManager会将任务进行拆分,调度到TaskManager上面执行。

TaskManager:是从节点(slave),TaskManager才是真正实现task的部分。

Client 提交作业到JobManager,就需要跟JobManager进行通信,它使用 Akka 框架或者库进行通信,另外Client与JobManager进行数据交互,使用的是

Netty框架。AKKA通信基于 Actor System,Client可以向JobManager发送指令,比如Submit job 或者 Cancel/update job。

JobManager 也可以反馈信息给Client,比如status updates,Statistics和results。

Client提交给JobManager的是一个Job,然后JobManager将job拆分成task,提交给TaskManager(worker)。

JobManager与TaskManager也是基于Akka进行通信,JobManager发送指令,比如 Deploy/Stop/Cancel Tasks或者触发CheckPoint,

反过来TaskManager也会跟JobManager 通信返回Task Status,Heartbeat(心跳),Statistics等。另外TaskManager之间的数据通过网络进行传输,

比如 Data Stream做一些算子的操作,数据往往需要在TaskManager之间做数据传输。

TaskManager Slot

TaskManager是进程,他下面运行的task(整个Flink应用是Job,Job可以拆分成很多task)是线程,每个task/subtask(线程)下可运行

一个或者多个operator,即 OperatorChain。Task是class,抽象的;subtask是Object,具体的。(这样类比学习。)

一个TaskManager通过Slot(任务槽)来控制它上面可以接受多少个task,比如一个TaskManager划分了3个Task Slot(仅限内存托管,目前CPU未做隔离),

它只能接受3个task。Slot均分TaskManager所托管的内存,比如一个TaskManager有6g 内存,那么每个Slot分配2G。

同一个TaskManager中的task共享TCP连接(通过多路复用)和心跳消息。它们还可以共享数据集和数据结构,从而减少每个任务的开销。

一个TaskManager有N个槽位只能接受N个Task吗?不是,后面会说共享槽位。

二、

OperatorChain && Task

为了更高效的分布式执行,Flink会尽可能的将 operator的subtask链接(chain)在一起形成task。

数据流(逻辑视图)

创建Source(并行度设置为1)读取数据源,数据经过FlatMap(并行度设置为2)做转换操作,然后数据经过Key Agg(并行度设置为2)做聚合操作,

最后经过Sink(并行度设置为2)将数据输出。

数据流(并行化视图)

并行度为1的Source读取数据源,然后FlatMap并行度为2读取数据源进行转化操作,然后数据经过Shuffle交给并行度为2的Key Agg进行聚合操作,

然后并行度为2的Sink将数据输出,未优化前的task总和为7。

数据流(优化后的视图)

并行度为1的Source读取数据源,然后FlatMap并行度为2读取数据源进行转化操作,然后数据经过Shuffle交给Key Agg进行聚合操作,

此时Key Agg和Sink操作合并为一个task(注意:将KeyAgg和Sink两个operator进行了合并,因为这两个合并后并不会改变整体的拓扑结构),

它们一起的并行度为2,数据经过Key Agg和Sink之后将数据输出,优化后的task总和为5。

Flink 运行时架构的更多相关文章

  1. [翻译] WCF运行时架构

    原文地址 http://www.cnblogs.com/idior/articles/971252.html 介绍 WCF具有非常易用的编程模型,服务开发者在掌握ABC的概念后可以很容易的使用WCF去 ...

  2. Fabric架构:抽象的逻辑架构与实际的运行时架构

    Fabric从1.X开始,在扩展性及安全性上面有了大大的提升,且新增了诸多的新特性: 多通道:支持多通道,提高隔离安全性. 可拔插的组件:支持共识组件.权限管理组件等可拔插功能. 账本数据可被存储为多 ...

  3. ILBC 运行时 (ILBC Runtime) 架构

    本文是 VMBC / D# 项目 的 系列文章, 有关 VMBC / D# , 见 <我发起并创立了一个 VMBC 的 子项目 D#>(以下简称 <D#>)  https:// ...

  4. Flink| 运行架构

    1. Flink运行时组件 作业管理器(JobManager) 任务管理器(TaskManager) 资源管理器(ResourceManager) 分发器(Dispatcher) 2. 任务提交流程 ...

  5. Apache Flink 分布式运行时环境

    Tasks and Operator Chains(任务及操作链) 在分布式环境下,Flink将操作的子任务链在一起组成一个任务,每一个任务在一个线程中执行.将操作链在一起是一个不错的优化:它减少了线 ...

  6. 所生成项目的处理器架构“MSIL”与引用“***”的处理器架构“x86”不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器...

    警告:所生成项目的处理器架构“MSIL”与引用“***”的处理器架构“x86”不匹配.这种不匹配可能会导致运行时失败.请考虑通过配置管理器更改您的项目的目标处理器架构,以使您的项目与引用间的处理器架构 ...

  7. java架构之路-(JVM优化与原理)JVM的运行时内存模型

    还是我们上次的图,我们上次大概讲解了类加载子系统的执行过程,验证,准备,解析,初始化四个过程.还有我们的双亲委派机制. 我们这次来说一下运行时内存模型.上一段小代码. public class Mai ...

  8. Java虚拟机及运行时数据区

    1.Java虚拟机的定义 Java虚拟机(Java Virtual Machine),简称JVM.当我们说起Java虚拟机时,可能指的是如下三种不同的东西: 抽象的虚拟机规范 规范的具体实现 一个运行 ...

  9. Objective-C Runtime 运行时之四:Method Swizzling

    理解Method Swizzling是学习runtime机制的一个很好的机会.在此不多做整理,仅翻译由Mattt Thompson发表于nshipster的Method Swizzling一文. Me ...

随机推荐

  1. tcpdump软件使用

    tcpdump是一个抓包工具, -w 选项是把抓到的包写到二进制文件中,一般扩展名是.cap或.dmp,但tcpdump程序创建文件时并不添加扩展名,可自己指定. -i 是指定要抓包的interfac ...

  2. Jenkins 进阶篇 - 参数化构建

    我们在构建任务时经常会遇到这样的情景,一个任务配置好了以后,在后面的构建过程中,又会修改一些配置.例如,我们构建项目的代码可能是拉取指定的分支或者是Tag进行构建,又或者是在构建是需要指定特定的运行平 ...

  3. 如何使用odoo的compute方法,自动计算odoo字段

    前言 在odoo的ORM创建数据字段的过程中,我们会经常需要定义一些字段用来计算某一些字段只和或其他计算结果. 今天介绍一个很好用的方法compute计算属性,这个方法其实是属于写在odoo fiel ...

  4. python开发包之pyecharts

    一.python包国内源网址有: 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/ ...

  5. Altium Designer 21.x中文版安装破解教程

    Altium Designer 21.x是一款优秀的PCB设计工具,可以原理图设计.电路仿真.PCB绘制编辑.拓扑逻辑自动布线.信号完整性分析和设计输出等功能,为设计者提供了全新的设计解决方案,提高设 ...

  6. 本地图片转base64编码

    通常获取图片的base64编码都是通过input的上传file属性获取转化,但是有时候需要的是本地图片不经过上传操作,直接拿本地图片转成base64编码就不行了,input上传操作需要人为操作一下,没 ...

  7. react native踩坑记录

    一 .安装 1.Python2 和Java SE Development Kit (JDK)可以直接通过腾讯电脑关键安装, Android SDK安装的时候路径里不能有中文和空格 2.配置java环境 ...

  8. SaltStack 水平权限绕过漏洞(CVE-2020-11651)

    影响版本 SaltStack < 2019.2.4 SaltStack < 3000.2 poc git clone https://github.com/jasperla/CVE-202 ...

  9. 未知高度-纯css实现水平垂直居中

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 一份热乎的字节跳动客户端面经,已拿Offer

    字节面试过程: 4月4号进行内推,7天的简历评估,11号接到电话面试,尽管猝不及防回答仓促,但好在前期准备充分,通过.14号现场面试,次日收到通知,通过,二面.三面都很顺利.20号进行HR面,26号收 ...