参考链接: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。

最新文章

  1. Scalaz(57)- scalaz-stream: fs2-多线程编程,fs2 concurrency
  2. Jsoup开发网站客户端第二篇,图片轮播,ScrollView兼容ListView
  3. React初识(按钮点击+输入绑定)
  4. 在python 中is和= = 的区别
  5. 怎样查看oracle当前的连接数
  6. [itint5]合并K个有序链表
  7. UVa 10048 (Floyd变形) Audiophobia
  8. websphere6.1安装与配置
  9. PHP漏洞全解(三)-客户端脚本植入
  10. 【算法】快速排序-Java版
  11. gulp前端自动化工作流
  12. JAVA死锁
  13. (NO.00001)iOS游戏SpeedBoy Lite成形记(一)
  14. 介绍一下Spring Cloud简介
  15. [java 2019-04-09] 代码生成word文档中的表格嵌套问题
  16. Ant和Maven
  17. windows内核对象管理学习笔记
  18. typescript handbook 学习笔记1
  19. Spring Boot 揭秘与实战(七) 实用技术篇 - Java Mail 发送邮件
  20. java命令行打war

热门文章

  1. sql-4-函数
  2. linux系统安装+windows系统安装
  3. P4168-蒲公英-分块
  4. pytest框架运用
  5. Maven作用及应用
  6. 大数据学习(17)—— HBase表设计
  7. Python小白的数学建模课-10.微分方程边值问题
  8. Yara规则学习
  9. Vulhub-Phpmyadmin 4.8.1远程文件包含漏洞
  10. KMP算法的详细解释