理解Flink并行处理

···························
分布式计算中,Flink 将算子(operator)的 subtask *链接(chain)*成 task【类似于Spark中的Stage阶段】。每个 task 由一个线程执行。把算子链接成 tasks 能够减少线程间切换和缓冲的开销,在降低延迟的同时提高了整体吞吐量。

当前的flink应用由3个Task,5个SubTask构成,每一个SubTask会由1个Thread处理

  • –Flink中的Task等价于Spark中的Stage
  • –Flink根据Operator Chain划分任务Task,两种依据:ForwardHash | Rebalance

每个 worker(TaskManager)都是一个 JVM 进程,并且可以在不同的线程中执行一个或多个 subtasks。为了控制 worker 接收 task 的数量,worker 拥有所谓的 task slots (至少一个)。

每个 task slots 代表 TaskManager 的一份固定资源子集。例如,具有三个 slots 的 TaskManager 会将其管理的内存资源分成三等份给每个 slot。 划分资源意味着 subtask 之间不会竞争资源,但是也意味着它们只拥有固定的资源。注意这里并没有 CPU 隔离,当前 slots 之间只是划分任务的内存资源。

通过调整 slot 的数量,用户可以决定 subtasks 的隔离方式。每个 TaskManager 有一个 slot 意味着每组 task 在一个单独的 JVM 中运行(例如,在一个单独的容器中启动)。拥有多个 slots 意味着多个 subtasks 共享同一个 JVM。 Tasks 在同一个 JVM 中共享 TCP 连接(通过多路复用技术)和心跳信息(heartbeat messages)。它们还可能共享数据集和数据结构,从而降低每个 task 的开销。

默认情况下,Flink 允许 subtasks 共享 slots,即使它们是不同 tasks 的 subtasks,只要它们来自同一个 job。因此,一个 slot 可能会负责这个 job 的整个管道(pipeline)。允许 slot sharing 有两个好处:

  • Flink 集群需要与 job 中使用的最高并行度一样多的 slots。这样不需要计算作业总共包含多少个 tasks(具有不同并行度)。
  • 更好的资源利用率。在没有 slot sharing 的情况下,简单的 subtasks(source/map())将会占用和复杂的 subtasks (window)一样多的资源。通过 slot sharing,将示例中的并行度从 2 增加到 6 可以充分利用 slot 的资源,同时确保繁重的 subtask 在 TaskManagers 之间公平地获取资源。

APIs 还包含了resource group 机制,它可以用来防止不必要的 slot sharing。

根据经验,合理的 slots 数量应该和 CPU 核数相同。在使用超线程(hyper-threading)时,每个 slot 将会占用 2 个或更多的硬件线程上下文(hardware thread contexts)。

理解Flink并行处理相关推荐

  1. Flink系列之:Java代码实现深入浅出的理解Flink算子的使用方法

    Flink系列之:Java代码实现深入浅出的理解Flink算子的使用方法 一.Map算子 二.filter算子 三.flatMap算子 四.keyBy算子 五.Reduce算子 六.union算子 七 ...

  2. flink 不设置水印_区分理解Flink水印延迟与窗口允许延迟的概念

    link 在开窗处理事件时间(Event Time) 数据时,可设置水印延迟以及设置窗口允许延迟(allowedLateness)以保证数据的完整性.这两者因都是设置延迟时间所以刚接触时容易混淆.本文 ...

  3. 深入理解 Flink 容错机制

    本文作者:Paul Lin 本文链接: 2019/07/28/深入理解-Flink-容错机制/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议.转载请注 ...

  4. 一文理解Flink 水位线(Flink Watermark)

    文章目录 Flink 中的时间语义 `处理时间` `事件时间` 水位线(Watermark) `事件时间和窗口` `什么是水位线` 有序流中的水位线 乱序流中的水位线 `水位线的特性` `如何生成水位 ...

  5. Flink 原理与实现:理解 Flink 中的计算资源

    Operator Chains 为了更高效地分布式执行,Flink会尽可能地将operator的subtask链接(chain)在一起形成task.每个task在一个线程中执行.将operators链 ...

  6. 深入理解Flink ---- 系统内部消息传递的exactly once语义

    At Most once,At Least once和Exactly once 在分布式系统中,组成系统的各个计算机是独立的.这些计算机有可能fail. 一个sender发送一条message到rec ...

  7. Flink源码解析 | 从Example出发:理解Flink启动流程

    从<Apache Flink本地部署>这篇文章中可以看到,我们启动集群都是通过脚本start-cluster.sh开始执行. 我们的源码解析之路就从flink的bash脚本入手. star ...

  8. 【大数据】带你理解flink的state概念

    文章目录 一.概述 1.简介 2. State backend 2.1.MemoryStateBackend 2.2.FsStatebackend: 2.3. RocksDBStateBackend ...

  9. 深刻理解Flink的有界流和无界流

    先来看看有界流的代码: package com.mischen.it;import org.apache.flink.api.common.typeinfo.Types; import org.apa ...

最新文章

  1. 一次搞定OpenCV源码及扩展模块的编译与环境配置
  2. 医院管理系统的新机遇
  3. 回归ASP,学习ADO,熟悉VBScript
  4. php拍视频上传,php视频拍照上传头像功能实现代码分享
  5. c++ primer 练习题4.34:
  6. hystrix合并请求_Hystrix中的批处理(折叠)请求
  7. 自然语言处理领域基本概念笔记
  8. 炒菜机器人放食材的顺序_如果给你个做饭机器人,你会让它做些什么饭菜?
  9. jmeter mysql查询结果提取_Jmeter-从数据库中获取数据并作为变量使用
  10. c#图片处理之:在图片上打上文字
  11. Delphi 正则表达式起步
  12. hibernate3连oracle的各种坑。。
  13. 电子书籍下载第一强贴
  14. python — Auto_QQ连连看
  15. java drawlines()方法
  16. 进销存软件网络版连接不上,如何设置IP地址
  17. 感觉中国程序员前景一片灰暗,是这样吗?Android开发工程师为你答疑解惑
  18. Div+Css实现经典左中右布局
  19. 霜降|JEPaaS提醒您注意防寒保暖
  20. 美女硕士养猪记:如何用大数据激活一头猪

热门文章

  1. userid和openid的区别_OAuth和OpenID的区别
  2. 【前端】【H5 API】地理定位(获取经纬度)
  3. (1) [Nature15] Deep Learning
  4. 云计算学习课程——越来越重要的云安全
  5. gif循环播放_防止动画GIF循环播放
  6. 颜值超高,触感舒爽的机械键盘,了解一下~丨钛空舱
  7. 入门图形学:光照模型(二)
  8. 搭建Windows下的Cocos2d-3.X的开发环境
  9. 如何从Exploit-DB中添加模块至Metasploit
  10. 矩阵打印问题-zigzag打印矩阵