Parallelism

parallelism 是并行的意思,在 Flink 里面代表每个算子的并行度,适当的提高并行度可以大大提高 Job 的执行效率,比如你的 Job 消费 Kafka 数据过慢,适当调大可能就消费正常了。
parallelism的设置有三个地方:

  • flink-conf.yaml 配置文件中
    parallelism.default: 1

  • 代码中设置全局的并行度

     env.setParallelism(n)
    
  • 代码中为算子设置单独的并行度

    data.keyBy(new xxxKey()).flatMap(new XxxFlatMapFunction()).setParallelism(5).map(new XxxMapFunction).setParallelism(5).addSink(new XxxSink()).setParallelism(1)
    

三种并行度设置的级别大小为:
算子设置并行度 > env 设置并行度 > 配置文件默认并行度。

Slot

slot是槽的意思,每个slot能执行一个并行度的任务,每个taskManager上能有多个slot;假如一个TaskManager上有4个slot,那么TaskManager为每个slot分配25%的内存, 可以在一个 Slot 中运行一个或多个线程, 同一 Slot 中的线程共享相同的 JVM。注意 Slot 只对内存隔离,没有对 CPU 隔离。
每个 Flink TaskManager 在集群中提供 Slot,Slot 的数量通常与每个 TaskManager 的可用 CPU 内核数成比例(一般情况下 Slot 个数是每个 TaskManager 的 CPU 核数)。Flink 配置文件中设置的一个 TaskManager 默认的 Slot 是 1。

Slot 和 Parallelism 的关系

  • Slot 是指 TaskManager 最大能并发执行的能力
  • parallelism 是指 TaskManager 实际使用的并发能力
  • parallelism 是可配置、可指定的
  • 假如程序设置的并行度超过了 TaskManager 可用的 Slot 数量,所以程序一直在等待资源调度并超过了一定的时间(该时间可配置),会抛出异常。

如何合理的设置并行度?

  1. Source 端并行度的配置:
    数据源端是 Kafka,作业的并行度和 Kafka 的分区数是否一致,如果小于 Kafka 的分区数,那么可以增大并行度至 Kafka 的分区数,然后再观察作业消费速度是否可以跟上数据生产速度;如果已经等于 Kafka 的分区数了,那得考虑下是否 Kafka 要扩大分区,但是这样可能会带来 Kafka 其他的问题,这个操作需要谨慎。

  2. 中间 Operator 并行度的配置:
    数据从 Source 端流入后,通常会进行一定的数据转换、聚合才能够满足需求,在数据转换中可能会和第三方系统进行交互,在交互的过程中可能会因为网络原因或者第三方服务原因导致有一定的延迟,从而导致这个数据交互的算子处理数据的吞吐量会降低,可能会造成反压,从而会影响上游的算子的消费。那么在这种情况下这些与第三方系统有交互的算子得稍微提高并行度,防止出现这种反压问题。
    除了这种与第三方服务做交互的外,另外可能的性能瓶颈也会出现在这类算子中,比如你 Kafka 过来的数据是 JSON 串的 String,然后需要转换成对象,在大数据量的情况下这个转换也是比较耗费性能的。
    所以数据转换中间过程的算子也是非常重要的,如果哪一步算子的并行度设置的不合理,可能就会造成各种各样的问题出现。

  3. Sink 端并行度的配置:
    Sink 端是数据流向下游的地方,可以根据 Sink 端的数据量进行评估,可能有的作业是 Source 端的数据量最大,然后数据量不断的变少,最后到 Sink 端的数据就一点点了,那么在最后的这个地方就可以将并行度设置的小一些。
    另外 Sink 端也是要与下游的服务进行交互,并行度还得根据下游的服务抗压能力来设置,如果在 Flink Sink 这端的数据量过大的话,然后在 Sink 处并行度也设置的很大,但是下游的服务完全撑不住这么大的并发写入,也是可能会造成下游服务直接被写挂的,下游服务可能还要对外提供一些其他的服务,如果稳定性不能保证的话,会造成很大的影响,所以最终还是要在 Sink 处的并行度做一定的权衡。

  4. Operator Chain:
    对于一般的作业(无特殊耗性能处),可以尽量让算子的并行度从 Source 端到 Sink 端都保持一致,这样可以尽可能的让 Job 中的算子进行 chain 在一起,形成链,数据在链中可以直接传输,而不需要再次进行序列化与反序列化,这样带来的性能消耗就会得到降低。

Flink基础(十二):Parallelism 和 Slot 详解相关推荐

  1. (二十二)访问者模式详解(伪动态双分派) - 转

    作者:zuoxiaolong8810(左潇龙),转载请注明出处. 本次LZ和各位分享一下访问者模式,从场景.设计初衷以及实现方面来说,访问者模式算是LZ即将写到的24种设计模式当中,最复杂也是最难理解 ...

  2. MySQL数据库,从入门到精通:第十二篇——MySQL数据类型详解

    MySQL数据库,从入门到精通:第十二篇--MySQL数据类型详解 第 12 章_MySQL数据类型精讲 1. MySQL中的数据类型 2. 整数类型 2. 1 类型介绍 2. 2 可选属性 2. 2 ...

  3. (十二)命令模式详解(故事版)- 转

    作者:zuoxiaolong8810(左潇龙),转载请注明出处. 背景:小左是魔都某公司技术部的一名屌丝程序猿,每天的工作就是维护一个20世纪的古董级项目,由于公司不大,所以公司很多制度不太完善,导致 ...

  4. 面渣逆袭:Redis连环五十二问,图文详解,这下面试稳了

    大家好,我是老三,面渣逆袭系列继续,这节我们来搞定Redis--不会有人假期玩去了吧?不会吧? 基础 1.说说什么是Redis? Redis是一种基于键值对(key-value)的NoSQL数据库. ...

  5. [Java入门笔记] 面向对象编程基础(二):方法详解

    2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...

  6. 【Android游戏开发二十二】(图文详解)游戏中灵活实现动画播放!简述J2me的游戏类库与Android游戏开发!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明:(作者新浪微博: @李华明Himi ) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/andr ...

  7. VR开发基础(二)一文详解Oculus环境helloxr的openxr核心接口流程

    注:Oculus使用的是开源的hello_xr示例,但要使用自家的loader:在hello_xr上篇侧重分析了入口和图形的基本流程,此篇将侧重分析XR相关的流程 一,Setup and Build ...

  8. Javascript(十二)javascript 事件详解

    一.事件定义 关于事件实际上我们已经初步接触过了,指的就是用户与浏览器交互的一瞬间. 我们通过为指定事件绑定回调函数的形式来处理事 件,当指定事件触发以后我们的回调函数就会被调用,这样我们的页面就可以 ...

  9. NIO详解(十二):AsynchronousFileChannel详解

    1. 概述 Java NIO中的FileChannel是一个连接到文件的通道.可以通过文件通道读写文件.FileChannel无法设置为非阻塞模式,他总是运行在阻塞模式下.在Java 7中,Async ...

最新文章

  1. Windows安装MRTG后的配置
  2. python开发框架 代码生成_我的第一个python web开发框架(28)——定制ORM(四)...
  3. javascript中五句话
  4. RabbitMQ延迟消息的极限是多少?
  5. Python3.2+ 的 concurrent.futures 模块,利用 multiprocessing 实现高并发。
  6. sudoku me_Java Sudoku解算器程序
  7. cocos tiledmap无法显示 不显示 无法加载
  8. Litestar4D道路照明设计
  9. leetcode 左程云笔记
  10. [CF364D]Ghd
  11. matlab output()函数,matlab 函数y=f(input,output)该如何实现?
  12. 当前 .NET SDK 不支持将 .NET Core 2.2 设置为目标。请将 .NET Core 2.1 或更低版本设置。
  13. Xposed 模块编写
  14. Python字符串切片总结
  15. Java使用POI实现导出Word文档
  16. Oracle回收站机制
  17. 新任学校领导的国家简报
  18. 库卡机器人坐标手势_在工具坐标系中移动库卡机器人
  19. Moo Volume
  20. 推荐一本书 selenium2+python自动化-作者虫师

热门文章

  1. 胎心仪/指夹式血氧仪/监护仪/数码管电量显示/数字闹钟等,低功耗抗干扰LED数码管显示(数显)驱动IC-VK1S68C SSOP24小体积封装,可驱动70/66/52/60点阵
  2. 绿色tftp服务器:tftpd32的配置
  3. tsm 识别 Linux7 HP磁带机,可通过FC访问的基于HBA卡target mode的虚拟磁带库(MHVTL+QLogic-FC+SCST+RHEL6.1)安装配置...
  4. UVa 109 - SCUD Busters(凸包)
  5. UI设计中的排版方法
  6. win10下运行两个apache分别用xampp和宝塔面板(最终放弃bt)
  7. 。系统美化 ① FAQ
  8. WPS2009在线存储终于来了
  9. 中国AI专利申请量超越美国:百度排名第一,国外企业申请量占20%
  10. 企业_商誉_管理_系统(调查需求)