李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
11.Flink并行度和任务链
Leefs
2022-01-10 PM
1270℃
0条
[TOC] ### 一、并行度(Parallelism) #### 1.1 概念 Flink程序的执行具有并行、分布式的特性。 在执行过程中,一个流(stream)包含一个或多个分区(stream partition),而每一个算子(operator)可以包含一个或多个子任务(operator subtask),这些子任务在不同的线程、不同的物理机或不同的容器中彼此互不依赖地执行。 **一个特定算子的子任务(subtask)的个数被称之为其并行度(parallelism)。** 一般情况下,一个流程序的并行度,可以认为就是其所有算子中最大的并行度。一个程序中,不同的算子可能具有不同的并行度。 ![11.Flink并行度和任务链01.png](https://lilinchao.com/usr/uploads/2022/01/1561340575.png) #### 1.2 并行度模式 Stream在算子之间传输数据的形式可以是one-to-one(forwarding)的模式也可以是redistributing的模式,具体是哪一种形式,取决于算子的种类。 + **One-to-one**:stream(比如在source和map operator之间)维护着分区以及元素的顺序。那意味着map算子的子任务看到的元素的个数以及顺序跟source算子的子任务生产的元素的个数、顺序相同,map、fliter、flatMap等算子都是one-to-one的对应关系。 **类似于spark中的窄依赖** + **Redistributing**:stream(map()跟keyBy/window之间或者keyBy/window跟sink之间)的分区会发生改变。每一个算子的子任务依据所选择的transformation发送数据到不同的目标任务。例如,keyBy()基于hashCode重分区、broadcast和rebalance会随机重新分区,这些算子都会引起 redistribute过程,而redistribute过程就类似于Spark中的shuffle过程。 **类似于spark中的宽依赖** ### 二、任务链(Operator Chains) Flink采用了一种称为任务链的优化技术,可以在特定条件下减少本地通信的开销。为了满足任务链的要求,必须将两个或多个算子设为相同的并行度,并通过本地转发(local forward)的方式进行连接。 ![11.Flink并行度和任务链02.png](https://lilinchao.com/usr/uploads/2022/01/1969417507.png) 上图所示的算子管道满足这些要求。它由三个算子组成,这些算子的任务并行度都被设为2,并且通过本地转发方式相连接。 ![11.Flink并行度和任务链03.png](https://lilinchao.com/usr/uploads/2022/01/2426364261.png) 上图展示了管道以任务链方式运行的过程。算子的函数被融合成了一个单一的任务,由一个线程执行。由函数生成的数据通过一个简单的方法调用移交给下一个函数;这样在函数之间直接传递数据,基本上没有序列化和通信成本。 任务链可以显著降低本地任务之间的通信成本,但也有一些场景,在没有链接的情况下运行管道操作是有意义的。例如,如果任务链中某个函数执行的开销巨大,那就可以将一条长的任务链管道断开,或者将一条链断开为两个任务,从而可以将这个开销大的函数调度到不同的槽(slots)中。 ![11.Flink并行度和任务链04.png](https://lilinchao.com/usr/uploads/2022/01/2579656673.png) 上图显示了在没有任务链的情况下相同管道操作的执行情况。所有函数都由独立的单个任务来评估,每个任务都在专有的线程中运行。 *附:* *[参考文章链接](https://confucianzuoyuan.github.io/flink-tutorial/book/chapter03-02-02-%E4%BB%BB%E5%8A%A1%E9%93%BE.html)*
标签:
Flink
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/1825.html
上一篇
10.Flink数据流和执行图介绍
下一篇
12.Flink流处理API之Environment
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
JavaSE
人工智能
RSA加解密
高并发
数据结构
Golang基础
稀疏数组
Flink
SQL练习题
机器学习
Golang
Java
HDFS
线程池
Spark SQL
JavaScript
Beego
Hbase
二叉树
Ubuntu
FastDFS
Tomcat
NIO
JVM
gorm
Java编程思想
LeetCode刷题
Eclipse
Spring
ajax
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞