Flink教程(19) Flink架构 JobManager TaskManager Task SubTask Slot

在这里插入图片描述

一、前言

最近发现玩游戏有点过头,夜里2点多还在玩,玩了一千多场亚瑟,拿到了第2次16.0分。感觉自己挺厉害,其实还是个菜。

打算最近不能玩王者了,太容易上瘾,只要有时间控制不住的玩。而且我自己特别喜欢玩1V1,虽然几分钟一局,但是不停的玩也能玩一两个小时。

记得最近一次玩,是和某市区前100的孙尚香,耗了13分钟,终于越塔斩杀。胜利后立马点击投降,退出,卸载游戏,那时都夜里2点了吧。

都不记得删了多少次王者荣耀,又多少次没隔一两天就安装回来。每次都想着不能玩了,删掉它,要好好学习。可每次都啪啪打脸,又装回来,还是游戏香。

自己的自律能力太差,想想必须戒掉。生活中还有很多别的事情要做,比如把Flink基础学完吧。我每次看到好的教程,收藏从未停止,学习从未开始。

二、Flink架构

在这里插入图片描述
上图是Flink官网经典的图,在很多博客都这个图。

  • 左侧白色背景的框Flink Program是Flink程序,它其实不属于Flink架构,其中Client与JobManager通信
  • JobManager控制着当个程序的执行,相当于大老板
  • TaskManager是Flink的工作进程,一般集群里有多个,相当于一群苦逼的打工人

1. JobManager

JobManager协调和管理程序的执行。
他的主要职责包括:任务调度,检查点(checkpoints)管理,故障恢复

  1. Flink客户端负责把GobGraph(作业图)发送给JobManager
  2. JobManager再生产ExecutionGraph(执行图)发送给TaskManager
  3. JobManagerTaskManager执行返回的结果再返回给Flink客户端

JobManager的内部主要包含3个部分,JobMasterResourceManagerDispatcher

1.1 JobMaster

由于早期Flink版本迭代以及中文文档比较少也比较乱。容易把JobManager和JobMaster混为一谈。

对于JobMaster,Flink Dispatcher通过JobManagerRunner将JobGraph发给JobMaster,JobMaster然后将JobGraph转换为ExecutionGraph,并分发给TaskManager执行。

1.2 ResourceManager

ResourceManager是负责资源管理,整个Flink集群只有一个。这个资源其实就是管理任务管理器的插槽slot。

注意:这个ResourceManager不是Yarn的,是Flink内置的资源管理器。
Yarn也有个ResourceManager,如果用Yarn模式,Yarn会自动管理分配资源(TaskManager的插槽)。

1.3 Dispatcher

Dispatcher提供一个REST接口让我们提交Job给JobManager(其实给JobManager中的JobMaster)。

2. TaskManager

  • Flink通常有多个TaskManager,每一个TaskManager包含一定数量的插槽slot。
  • 插槽的数量限制了TaskManager能够执行的任务数量。
  • Flink启动后,TaskManager会向资源管理器注册它的插槽。

2.1 Task和SubTask

  • 图的上面一部分是condensed view,是逻辑图 ,也就是client给JobManager的JobGraph。

  • 图的下面一部分是parallelized view,是执行图,是JobManager根据JobGraph+并行度计算得到。

  • Task和Subtask是不同层面上的概念,不能简单的说Subtask是Task的子任务。

  • Task是逻辑图上的,Task是逻辑概念,一个Operator就代表一个Task(多个Operator被chain之后产生的新Operator算一个Operator)。

  • 真正运行的时候,Task会按照并行度分成多个Subtask,Subtask是执行/调度的基本单元。 每个Subtask需要一个线程来执行。
    在这里插入图片描述
    在这里插入图片描述
    可以看出上图中有5个subtask。记住这个在下面插槽的概念中有用。

2.2 Slot 插槽

TaskManager是一个JVM进程,在TaskManager中可以并行运行一到多个Subtask

每个Subtask是一个线程,需要TaskManager为其分配相应的资源(内存),TaskManager使用Task Slot给Subtask分配资源。

通过调整 task slot 的数量,用户可以定义 subtask 如何互相隔离。

上一节5个绿色圆圈中的Subtask分配到不同的slot中。
当前并行度是2,此时占了5个slot。最右侧的那个slot空闲了。
在这里插入图片描述
默认情况下,Flink 允许 subtask 共享 slot,即便它们是不同的 task 的 subtask,只要是来自于同一作业即可。结果就是一个 slot 可以持有整个作业管道。
在这里插入图片描述
并行度改成6,此时占了6个slot。此时slot利用率很高。

  • 同一个application,也即同一个job中,多个 不同task的 subTask,可以运行在同一个 slot 资源槽中。
  • 同一个 task 中的多个的 subTask,不能运行在一个 slot 资源槽中,他们可以分散到其他的资源槽中。
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑟 王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值