Very easy 就能懂得一篇Flink运行时架构

前言
首先,还是那个熟悉的开场白。欢迎来到DJ丶小哪吒的博客空间,想想最近因为找工作也是许久没有更新自己的博客了呢。但是请各位放心,你们的DJ丶小哪吒还健在。一有时间肯定会抽出时间来更新自己的博客。最近找工作也是困难重重。也是屡屡碰壁。但是小编相信着,机会总会有的。在最后,小编也算是找到了一份合适的工作。希望在今后的道路中,每天会进步一点点。也希望大家跟我一起努力。感慨的话就不多说了,直接进入正题吧。今天要跟大家分享的是flink的运行时架构。

码字不易,先赞再看,养成习惯~~~
在这里插入图片描述

1、Flink运行架构

1.1、任务提交流程

在这里插入图片描述
Flink 任务提交后,Client 向 HDFS 上传 Flink 的 Jar 包和配置,之后向 Yarn ResourceManager 提 交 任 务 ,ResourceManager 分 配 Container 资 源 并 通 知 对 应 的 NodeManager 启 动 ApplicationMaster,ApplicationMaster 启动后加载 Flink 的 Jar 包 和 配 置 构 建 环 境 , 然 后 启 动 JobManager , 之 后 ApplicationMaster 向 ResourceManager 申 请 资 源 启 动 TaskManager ,ResourceManager 分 配 Container 资 源 后 , 由 ApplicationMaster 通 知 资 源 所 在 节 点 的 NodeManager 启TaskManager,NodeManager 加载 Flink 的 Jar 包和配置构建环境并启动 TaskManager, TaskManager 启动后向 JobManager 发送心跳包,并等待 JobManager 向其分配任务。

1.2、Worker 与 Slots

每一个 worker(TaskManager)是一个 JVM 进程,它可能会在独立的线程上执行一个或 多个 subtask。为了控制一个 worker 能接收多少个 task,worker 通过 task slot 来进 行控制(一个 worker 至少有一个 task slot)。
每个 task slot 表示 TaskManager 拥有资源的一个固定大小的子集。假如一个 TaskManager 有三个 slot,那么它会将其管理的内存分成三份给各个 slot。资源 slot 化 意味着一个 subtask 将不需要跟来自其他 job 的 subtask 竞争被管理的内存,取而代之 的是它将拥有一定数量的内存 储备。需要注意的是,这里不会涉及到 CPU 的隔离,slot 目 前仅仅用来隔离 task 的受管理的内存。
通过调整task slot的数量,允许用户定义 subtask 之间如何互相隔离。如果一个 TaskManager 一个 slot,那将意味着每个 task group 运行在独立的 JVM 中(该 JVM 可 能是通过一个特定的容器启动的),而一个 TaskManager 多个 slot 意味着更多的 subtask 可以共享同一 个 JVM。而在同一个 JVM 进程中的 task 将共享 TCP 连接(基于多路复用) 和心跳消息。它们也可能共享数据集和数据结构,因此这减少了每个 task 的负载。
在这里插入图片描述
Task Slot 是静态的概念,是指 TaskManager 具有的并发执行能力,可以通过参数 taskmanager.numberOfTaskSlots 进行配置,而并行度 parallelism 是动态概念,即 TaskManager 运行程序时实际使用的并发能力,可以通过参数 parallelism.default 进行 配置。也就是说,假设一共有 3 个 TaskManager,每一个 TaskManager 中的分配 3 个 TaskSlot,也 就 是 每 个 TaskManager 可 以 接 收 3 个 task , 一 共 9 个 TaskSlot , 如 果 我 们 设 置 parallelism.default=1,即运行程序默认的并行度为 1, 9 个 TaskSlot 只用了 1 个,有 8 个空 闲,因此,设置合适的并行度才能提高效率。

1.3、程序与数据流

Flink 程序的基础构建模块是 流(streams) 与 转换(transformations)(需要注意 的是,Flink 的 DataSet API 所使用的 DataSets 其内部也是 stream)。一个 stream 可 以看成一个中间 结果,而一个 transformations 是以一个或多个 stream 作为输入的某种 operation,该 operation 利用这些 stream 进行计算从而产生一个或多个 result stream。

在运行时,Flink 上运行的程序会被映射成 streaming dataflows,它包含了 streams 和 transformations operators。每一个 dataflow 以一个或多个 sources 开始以一个或 多个 sinks 结束。dataflow 类似于任意的有向无环图(DAG),当然特定形式的环可以通过 iteration 构建。 在大部分情况下,程序中的 transformations 跟 dataflow 中的 operator 是一一对应的关系,但 有时候,一个 transformation 可能对应多个 operator。

在这里插入图片描述

1.4、并行数据流

Flink 程序的执行具有并行、分布式的特性。在执行过程中,一个 stream 包含一个或 多个 stream partition ,而每一个 operator 包含一个或多个 operator subtask,这些 operator subtasks 在不同的线程、不同的物理机或不同的容器中彼此互不依赖得执行。

一个特定 operator 的 subtask 的个数被称之为其 parallelism(并行度)。一个 stream 的并行度总是等同于其 producing operator 的并行度。一个程序中,不同的 operator 可能具有不同的并行度。
在这里插入图片描述

1.5、 task 与 operator chains

出于分布式执行的目的,Flink 将 operator 的 subtask 链接在一起形成 task,每个 task 在 一个线程中执行。将 operators 链接成 task 是非常有效的优化:它能减少线程之 间的切换和基于缓存区的数据交换,在减少时延的同时提升吞吐量。链接的行为可以在编程 API 中进行指定。
下面这幅图,展示了 5 个 subtask 以 5 个并行的线程来执行:
在这里插入图片描述

1.6、SparkStreaming&&Fink

在这里插入图片描述

好了,以上内容就到这里了。你学会了吗。 欢迎路过的朋友关注小编哦。各位朋友关注点赞是小编坚持下去的动力。小编会继续为大家分享更多的知识哦~~~。

我是DJ丶小哪吒。是一名互联网行业的工具人,小编的座右铭:“我不生产代码,我只做代码的搬运工”…哈哈哈,我们下期见哦,Bye~

每天进步一点,不用去刻意跟别人比。你要战胜的不是别人,而是自己
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值