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. IOS屏幕旋转思路和实践

    这段时间同事在做一个直播项目,项目有个需求:一个界面需要手动设置屏幕的方向,设置好之后方向不能变化.完成这个需求花了特别大的精力,归因是网上关于屏幕旋转的知识比较凌乱,解决问题花费不少时间,最后决定把 ...

  2. __unsafe_unretained的含义

    OC的变量限定词的官方解释: __strong is the default. An object remains “alive” as long as there is a strong point ...

  3. CentOS 6 update curl

    touch /etc/yum.repos.d/city-fan.repo vi /etc/yum.repos.d/city-fan.repo add the following: [CityFan] ...

  4. Spring Data Solr相关配置

    1.增加Maven POM文件的存储库:pom配置如下: <repositories> <repository> <id>spring-milestone</ ...

  5. mysql binlog抽取某个表的数据

    1.先把binlog文件转化为sql --base64-output=decode-rows -v > /var/mydiag.sql 2.抽取某一个表的数据 grep -B0 -A27 -w ...

  6. 解决github下载速度慢的问题 ,亲测有效

    原文链接 https://blog.csdn.net/tsq292978891/article/details/78260066 解决办法: 手动更改hosts 关于hosts的作用这里就不做声明了. ...

  7. AES和RSA的加密过程通过面向对象的方式写成一个类,封装起来

    # 面向对象的方式 实现加密方法 from Crypto.Cipher import AES from Crypto import Random from binascii import b2a_he ...

  8. Mysql 分组选择

    Mysql 分组选择 在其他的数据库中我们遇到分组选择的问题时,比如在分组中计算前10名的平均分 我们可以使用row_number()over() 比较方便的得到. 但是在mysql中,问题就被抛了出 ...

  9. ubuntu16.04下latex环境搭建

    背景: 最近需要使用latex做一下简历~~~ 工具: sublime text3 (plugin: latextools) + texlive-full 配置: Preferences -> ...

  10. 基于KMP算法的字符串模式匹配问题

    基于KMP算法的字符匹配问题 反正整个清明都在纠结这玩意...差点我以为下个清明要给自己过了. 至于大体的理解,我就不再多说了(还要画图多麻烦鸭),我参考了以下两个博客,写的真的不错,我放了超链接,点 ...