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中的线程中断

    线程会根据中断标志位 自行了断自己 https://www.cnblogs.com/yangming1996/p/7612653.html 如何停止线程 1.设置中断标识位 2.sleep时设置中断标 ...

  2. ORACLE数据库自动备份压缩的批处理脚本 rar 7z

    使用7z的版本: @echo offset filename="d:\backup\dbname_%date:~0,10%"set zipfile="d:\backup\ ...

  3. 使用原生JDBC循环读取文件并持久化到数据库

    先上代码: package com.demo.common.service; import java.io.File; import java.io.FileInputStream; import j ...

  4. 修改Linux主机名

    如果安装时没有设置,一般默认主机名为localhost.localdomain. 通过以下方式修改成自己设置的主机名: 1. vi /etc/sysconfig/network NETWORKING= ...

  5. Jenkins服务使用nginx代理服务器做负载均衡

    学习nginx代理服务器做负载均衡的使用 在本地安装Nginx 1.下载nginx http://nginx.org/en/download.html         下载稳定版本,以nginx/Wi ...

  6. WordPress版微信小程序3.1.5版的新功能

    产品的完善是无止境,每过段时间就会发现产品的新问题,使用的人越多,提的需求也会越多,我听得最多的一句话就是:如果加上某某功能就完美了.其实,完美是不存在的,每个人的视角不一样,完美的定义也是不一样的. ...

  7. 服务注册中心,Eureka比Zookeeper好在哪里?

    著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性).A(可用性).和P(分区容错性).由于分区容错性P在分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡. 因此: Zookeep ...

  8. 在Windows2008下安装SQL Server 2005无法启动服务的解决办法

    在Windows2012下安装SQL Server 2005无法启动服务的解决办法 1.正常安装任一版本的SQL Server 2005. 2.安装到SqlServer服务的时候提示启动服务失败  此 ...

  9. Java使用Jedis操作Redis大全

    Java操作Redis需要导入两个jar: commons-pool2-2.4.2.jar jedis-2.1.0.jar package com.chinasofti.test; import ja ...

  10. [java,2017-06-12] myEclipse双击无法打开文件

    点击 Window---->Preferences---> General---> Editors ---> File Associations 选择Associated ed ...