Tasks and Operator Chains(任务及操作链)

在分布式环境下,Flink将操作的子任务链在一起组成一个任务,每一个任务在一个线程中执行。将操作链在一起是一个不错的优化:它减少了线程间的切换和缓冲,提升了吞吐量同时减低了时延。这些链式行为是可配置的,详情请见:chaining docs

下图中的示例以5个子任务来运行,因此有5个并发的线程

JobManagers, Task Managers, Clients

Flink的运行时环境由两个进程组成:

  • JobManagers :JobManager有时也叫Masters,主要是协调分布式运行。他们调度任务,协调checkpoint,协调失败任务的恢复等等

一个Flink集群中至少有一台JobManager节点。高可用性的集群中将会有多台JobManager节点,其中有一台是leader节点,其他的是备节点(standby)。

  • TaskManagers: TaskManagers有时也叫Workers,TaskManager主要是执行dataflow中的任务(tasks),缓存数据以及进行数据流的交换。

每一个集群中至少有一个TaskManager。

JobManager和TaskManager可以有多种启动方式:直接在物理机上以standalone集群的形式启动,在容器中启动以及通过资源管理框架YARN或者Mesos来启动。TaskManagers与JobManagers进行通信,发送心跳信息来告知JobManager自己还处于活跃状态,同时接受JobManager分配的任务。

Client并不是运行时环境或者程序运行的一部分,而是用来准备数据流和将数据流发送到JobManager中。之后client可以断开连接,或者继续保持连接来接收处理报告。Client要么作为触发执行的Java/Scala程序的一部分,或者是在命令行进程./bin/flink run …中

TaskSlots and Resources

每一个worker(TaskManager)是一个JVM进程,并在不同的线程中运行着一个或者多个子任务。为了控制每个worker可接受的最大任务数,每个worker需要有个task slots(任务槽)(至少有一个槽)。每一个task slot代表着TaskManager的一个固定的资源子集,例如一个TaskManager有三个slot的话,意味着该TaskManager将会分配1/3的资源到每一个slot中去。将资源纳入槽中意味着一个任务不会跟作业中的其他任务竞争托管内存,而是会保留一定的托管内存。注意:现在的slot还没有进行CPU的隔离,当前仅仅进行了托管内存的隔离。

通过调整slot的数量,用户可以自定义多少个任务之间彼此隔离。一个TaskManager有一个slot意味着每一个任务运行在一个独立的JVM进程中。有多个slot意味着多个任务共享一个JVM进程,共享JVM进程的任务之间共享TCP连接和心跳信息,同时共享数据集和数据结构,从而节省了每个任务的开销。

默认情况下,Flink允许subtask(子任务)之间共享slot,即使不是来自同一个task(任务),只要这些subtask(子任务)来自同一个作业。结果是一个槽可以持有作业的整个pipeline 。允许slot共享的有两个好处:

  • 1、Flink集群需要与作业中使用的最高并行度一样多的任务槽(task slot),不在需要再去计算一个程序中总共包含了多少了task(任务)。

  • 2、使得获取更好的资源利用率变得更加容易,没有slot共享的话,非密集型的source/map子任务将会拆分成与密集型的window子任务一样多的资源。有了slot共享,就可以提高任务的并发数,从2个到6个,充分利用了槽的资源,也保证了子任务公平地分布在TaskManager集群中。

API中还包括了一个资源组机制,可以用来防止不需要的slot共享。

根据经验法则,最好的slot数量配置是跟CPU核数一致,对于超线程,每个slot可以分配两个或者更多的硬件线程上下文。

StateBackends       

存储key/value键值索引的切确数据结构取决于所选的state后端。一种state后端是将数据保存在内存的哈希map中 ,另一种则是以key/value的形式保存在RocksDB中。除了定义保存State的数据结构,State后端还实现了一个逻辑来获取key/value state的时间点快照并作为checkpoint的一部分保存起来。

Savepoints       

用DataStream API书写的程序可以从一个savepoint 中恢复执行。Savepoint允许更新您的程序而不丢失Flink中的任何state信息。

Savepoints手动触发checkpoint,获取程序的快照并将快照写入到state后端。它们依靠定期的checkpoint机制,在执行过程中程序在work节点上产生周期性快照,并生成checkpoint。对于故障恢复,只需要最新生成的checkpoint,旧的checkpoint可以在新的checkpoint生成之后就丢弃掉了。 
   
Savepoints类似于周期性的checkpoint,除了它们是由用户手动触发的,并且不会在新的checkpoint生成之后而自动过期。Savepoints可以通过命令行生成或者在取消一个作业时调用REST API产生。

Apache Flink 分布式运行时环境的更多相关文章

  1. Apache Flink - 分布式运行环境

    1.任务和操作链 下面的数据流图有5个子任务执行,因此有五个并行线程. 2.Job Managers, Task Managers, Clients Job Managers:协调分布式运行,他们安排 ...

  2. kubernetes实战-交付dubbo服务到k8s集群(三)安装配置maven和java运行时环境的底包镜像

    maven 官方地址: 官方地址 下载maven,shdd7-200 # cd /opt/src # wget https://archive.apache.org/dist/maven/maven- ...

  3. Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)

    自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...

  4. 运行时环境(The Runtime Environment)

    App Engine应用响应网络请求.当一个客户端(典型的是用户的Web浏览器)使用HTTP请求(比如获取在URL上的网页)连接上应用的时候,网络请求就开始了.当App Engine接收到请求时,它会 ...

  5. Java运行时环境---内存划分

    背景:听说Java运行时环境的内存划分是挺进BAT的必经之路. 内存划分: Java程序内存的划分是交由JVM执行的,而不像C语言那样需要程序员自己买单(C语言需要程序员为每一个new操作去配对del ...

  6. 在Linux安装ASP.NET Core运行时环境

    我使用的是Centos7 ,其它的Linux请参考微软文档   微软官方介绍文档:                                https://www.microsoft.com/n ...

  7. java 运行时环境和编译器环境

    必须要保证运行环境高于编译环境 1.编译器的环境设置 单击项目右键-> Properties -> Java Compiler -> 5或6 如果编译器的环境高于运行时环境会报错. ...

  8. Maven_运行时环境

    首先,创建一动态web工程. Src-----源码目录 build文件夹在java结构下看不出,但可以在Navigator下可以看出是个源码目录,如下图: 以下图中是运行时环境. 它其实是一组jar包 ...

  9. 教你如何检查一个函数是否为JavaScript运行时环境内建函数

    在开发过程中,对于某些API在现有的JavaScript运行时环境不支持的时候,我们大都会采用加入polyfill来解决这个问题.但有些时候我们可能需要知道现在某个API到底是否为运行时环境所原生支持 ...

随机推荐

  1. Java Web开发Session超时设置

    在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的.Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时 ...

  2. RN 使用第三方字体

    Android: 程序会尝试在 assets/fonts 目录下查找字体文件,如果没找到会使用默认的字体 所以将文件放到路径下才能生效! [project root]/android/app/src/ ...

  3. leetcode 890. 查找和替换模式 Python

    用模式的每个字母去当做key对应单词列表的每个字母value, 如果放进dict之前检测到key已经存在,就检测Word[i][j]是否是和已经存在的value一致,不一致就代表不匹配,break检查 ...

  4. chrony 时间同步服务器

    这篇文章也不错: https://www.zfl9.com/chrony.html 简介 chrony是网络时间协议(NTP)的多用途实现.它可以使系统时钟与NTP服务器.参考时钟(例如GPS接收器) ...

  5. Galaxy2D Game Engine 4.2 开发版发布

    Update: ◆删除Graph_GetRenderTarget()函数,添加Graph_CopyBackBuffer()/Graph_CopyRanderTarget()函数 ◆Graph_EndS ...

  6. 用antd和webview打造一款大数据客户端程序

    要想提高工作效率,必须得有好的工具.大数据有很多组件,但是邪了门儿的就是,竟然没有一个好用的客户端程序. 没办法,我只好用antd+webview自己做了一款跨平台的桌面应用. 先看下效果. 这是gi ...

  7. Scaffold-DbContext 命令参数

    NAME Scaffold-DbContext SYNOPSIS Scaffolds a DbContext and entity types for a database. SYNTAX Scaff ...

  8. Scala编程 摘录

    有件你会注意到的事情是,几乎所有的 Scala 的控制结构都会产生某个值.这是函数式语言所采用的方式,程序被看成是计算值的活动,因此程序的控件也应当这么做.你也可以把这种方式看做早已存在于指令式语言中 ...

  9. cucumber soapui test web services

    没有UI,所以不需要Selenium. 首先Cucumber: 每个web service形成一个feature文件,描述完成的业务场景. 是否引入参数? 如果引入参数,可能需要根据某种方式保存参数, ...

  10. 一文搞清到底什么是 .NET?

    现在各种 .NET 满天飞,别说新手了,连我这样的老手都差点被绕进去.到底什么是 .NET 呢?通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? 这篇文章好长呀 ...