简介

Flink运行时主要角色有两个:JobManager和TaskManager,无论是standalone集群,flink on yarn都是要启动这两个角色。JobManager主要是负责接受客户端的job,调度job,协调checkpoint等。TaskManager执行具体的Task。TaskManager为了对资源进行隔离和增加允许的task数,引入了slot的概念,这个slot对资源的隔离仅仅是对内存进行隔离,策略是均分,比如taskmanager的管理内存是3GB,假如有两个个slot,那么每个slot就仅仅有1.5GB内存可用。Client这个角色主要是为job提交做些准备工作,比如构建jobgraph提交到jobmanager,提交完了可以立即退出,当然也可以用client来监控进度。

Jobmanager和TaskManager之间通信类似于Spark 的早期版本,采用的是actor系统。如下图

什么是task?

在spark中:

RDD中的一个分区对应一个task,task是单个分区上最小的处理流程单元。被送到某个Executor上的工作单元,和hadoopMR中的MapTask和ReduceTask概念一样,是运行Application的基本单位,多个Task组成一个Stage

上述引入spark的task主要是想带着大家搞明白,以下几个概念:

Flink的并行度由什么决定的?

Flink的task是什么?

Flink的并行度由什么决定的?

这个很简单,Flink每个算子都可以设置并行度,然后就是也可以设置全局并行度。

Api的设置

.map(new RollingAdditionMapper()).setParallelism(10)

全局配置在flink-conf.yaml文件中,parallelism.default,默认是1:可以设置默认值大一点

Flink的task是什么?

按理说应该是每个算子的一个并行度实例就是一个subtask-在这里为了区分暂时叫做substask。那么,带来很多问题,由于flink的taskmanager运行task的时候是每个task采用一个单独的线程,这就会带来很多线程切换开销,进而影响吞吐量。为了减轻这种情况,flink进行了优化,也即对subtask进行链式操作,链式操作结束之后得到的task,再作为一个调度执行单元,放到一个线程里执行。如下图的,source/map 两个算子进行了链式;keyby/window/apply有进行了链式,sink单独的一个。

说明:图中假设是source/map的并行度都是2,keyby/window/apply的并行度也都是2,sink的是1,总共task有五个,最终需要五个线程。

默认情况下,flink允许如果任务是不同的task的时候,允许任务共享slot,当然,前提是必须在同一个job内部。

结果就是,每个slot可以执行job的一整个pipeline,如上图。这样做的好处主要有以下几点:

1.Flink 集群所需的taskslots数与job中最高的并行度一致。也就是说我们不需要再去计算一个程序总共会起多少个task了。

2.更容易获得更充分的资源利用。如果没有slot共享,那么非密集型操作source/flatmap就会占用同密集型操作 keyAggregation/sink 一样多的资源。如果有slot共享,将基线的2个并行度增加到6个,能充分利用slot资源,同时保证每个TaskManager能平均分配到重的subtasks,比如keyby/window/apply操作就会均分到申请的所有slot里,这样slot的负载就均衡了。

链式的原则,也即是什么情况下才会对task进行链式操作呢?简单梗概一下:

上下游的并行度一致

下游节点的入度为1 (也就是说下游节点没有来自其他节点的输入)

上下游节点都在同一个 slot group 中(下面会解释 slot group)

下游节点的 chain 策略为 ALWAYS(可以与上下游链接,map、flatmap、filter等默认是ALWAYS)

上游节点的 chain 策略为 ALWAYS 或 HEAD(只能与下游链接,不能与上游链接,Source默认是HEAD)

两个节点间数据分区方式是 forward(参考理解数据流的分区)

用户没有禁用 chain

slot和parallelism

1.slot是指taskmanager的并发执行能力

在hadoop 1.x 版本中也有slot的概念,有兴趣的读者可以了解一下

taskmanager.numberOfTaskSlots:3

每一个taskmanager中的分配3个TaskSlot,3个taskmanager一共有9个TaskSlot

2.parallelism是指taskmanager实际使用的并发能力

parallelism.default:1

运行程序默认的并行度为1,9个TaskSlot只用了1个,有8个空闲。设置合适的并行度才能提高效率。

3.parallelism是可配置、可指定的

1.可以通过修改$FLINK_HOME/conf/flink-conf.yaml文件的方式更改并行度

2.可以通过设置$FLINK_HOME/bin/flink 的-p参数修改并行度

3.可以通过设置executionEnvironmentk的方法修改并行度

4.可以通过设置flink的编程API修改过并行度

5.这些并行度设置优先级从低到高排序,排序为api>env>p>file.

6.设置合适的并行度,能提高运算效率

7.parallelism不能多与slot个数。

slot和parallelism总结

1.slot是静态的概念,是指taskmanager具有的并发执行能力

2.parallelism是动态的概念,是指程序运行时实际使用的并发能力

3.设置合适的parallelism能提高运算效率,太多了和太少了都不行

4.设置parallelism有多中方式,优先级为api>env>p>file

flink java 并行度_flink solt和并行度相关推荐

  1. flink solt和并行度

    简介 Flink运行时主要角色有两个:JobManager和TaskManager,无论是standalone集群,flink on yarn都是要启动这两个角色.JobManager主要是负责接受客 ...

  2. 2021年最新最全Flink系列教程_Flink快速入门(概述,安装部署)(一)(JianYi收藏)

    文章目录 引言 相关教程直通车: day01_Flink概述.安装部署和入门案例 今日目标 Flink概述 什么是批处理和流处理 为什么需要流计算 Flink的发展史 Flink的官方介绍 Flink ...

  3. Flink - Java篇

    文章目录 前言 一.概述 1 Flink是什么 2 架构分层 3 数据处理流水线 4 运行组件 TaskManager JobManager ResourceManager Dispatcher 5 ...

  4. 在Mac上使用idea搭建flink java开发环境

    1.环境 本文档记录的是使用flink的java API简单地创建应用的过程. 前置条件:需要安装Java.maven和flink. 1.1 Java环境变量 Java需要jdk.path.class ...

  5. 【已解决 Flink Java API问题】The return type of function ‘xxx‘ could not be determined automatically

    Flink Java API不像Scala API可以随便写lambda表达式,写完以后需要使用returns方法显式指定返回值类型,否则会报下面错误,大概意思就是说Java的lambda表达式不能提 ...

  6. flink sql设置并行度_Flink原理——任务调度原理

    本文主要从以下几个方面介绍Flink的任务调度原理 一.Flink运行时的组件 二.TaskManger与Slots 三.程序与数据流 四.Flink的执行图 五.Flink程序执行的并行度 六.Fl ...

  7. flink sql设置并行度_Flink集成Hivestream模式用例

    01 背景 基于前面的文章 Flink集成hive bath模式用例 knowfarhhy,公众号:大数据摘文Flink 集成Hive ,我们继续介绍stream模式下的用例. 02 流模式读取Hiv ...

  8. flink java旁路输出(Side Output),对原始流进行分流、复制

    flink通过ProcessFunction来分流,可以将一份流进行拆分.复制等操作,比如下面的代码通过读取一个基本的文本流,将流分别做处理后进行输出: 案例代码 package wordcount; ...

  9. Flink java 自定义reduce函数,以wordcount为例

    maven项目的文本文件与pom.xml配置请参考:https://blog.csdn.net/weixin_35757704/article/details/120555968 同样以wordcou ...

最新文章

  1. 组态王怎么做超级曲线_鲁班修图:一款超级好用的修图软件
  2. 利用反射对应数据库字段
  3. 如何用ps简单快速扣头发丝
  4. 微信小程序image组件开发程序以及相关图片问题参考资料汇总
  5. c语言哈夫曼压缩文本,用哈夫曼压缩文件(C语言)
  6. wince工业平板电脑_如何防止工业平板电脑温度过高?
  7. Linux串口编程_termios
  8. python三角函数拟合_使用python进行数据拟合最小化函数
  9. Linux操作系统下信号处理函数
  10. Mac实用技巧:如何关闭笔记本的Fn功能
  11. 超市管理系统的常用软件
  12. Java API 帮助文档中英文版下载
  13. TensorFlow团队:TensorFlow Probability的简单介绍
  14. PPT这样学就对了之首页制作
  15. 无线固话新型诈骗技术防范
  16. 清华姚班教授: 「读博,你真的想好了吗?」与 UIUC 王鸿伟「读博,我想好了!」...
  17. Sql server日志
  18. 服务器操作系统怎么做映像,如何网络捕获使用 Sysprep 和 PXE 配置的服务器操作系统映像...
  19. 小企业智能路由器的应用 (用智能路由器推广你的烤肉饭)
  20. 2021年目标检测大盘点|目标检测总结——附论文代码下载

热门文章

  1. windows窗口 matlab,windows – 有没有办法改变MATLAB命令窗口的标题?
  2. jq获取页面高度_JQ获取窗口文档等等高度总结!
  3. Emscripten 单词_极光单词独创多种学习方法助您高效背单词
  4. mysql配置两个猪数据库_Linux下安装启动多个Mysql
  5. Linux下安装-配置-mysql-5.7.13
  6. springboot项目中关于时间类型转换的格式问题
  7. Java微服务篇1——SpringBoot
  8. 关于Redis配置主从复制踩到的坑,主机不显示从机的连接信息
  9. request.getContextPath()取不到值
  10. Vue 组件的自定义事件