Apache Flink 分布式运行时环境
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 分布式运行时环境的更多相关文章
- Apache Flink - 分布式运行环境
1.任务和操作链 下面的数据流图有5个子任务执行,因此有五个并行线程. 2.Job Managers, Task Managers, Clients Job Managers:协调分布式运行,他们安排 ...
- kubernetes实战-交付dubbo服务到k8s集群(三)安装配置maven和java运行时环境的底包镜像
maven 官方地址: 官方地址 下载maven,shdd7-200 # cd /opt/src # wget https://archive.apache.org/dist/maven/maven- ...
- Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)
自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...
- 运行时环境(The Runtime Environment)
App Engine应用响应网络请求.当一个客户端(典型的是用户的Web浏览器)使用HTTP请求(比如获取在URL上的网页)连接上应用的时候,网络请求就开始了.当App Engine接收到请求时,它会 ...
- Java运行时环境---内存划分
背景:听说Java运行时环境的内存划分是挺进BAT的必经之路. 内存划分: Java程序内存的划分是交由JVM执行的,而不像C语言那样需要程序员自己买单(C语言需要程序员为每一个new操作去配对del ...
- 在Linux安装ASP.NET Core运行时环境
我使用的是Centos7 ,其它的Linux请参考微软文档 微软官方介绍文档: https://www.microsoft.com/n ...
- java 运行时环境和编译器环境
必须要保证运行环境高于编译环境 1.编译器的环境设置 单击项目右键-> Properties -> Java Compiler -> 5或6 如果编译器的环境高于运行时环境会报错. ...
- Maven_运行时环境
首先,创建一动态web工程. Src-----源码目录 build文件夹在java结构下看不出,但可以在Navigator下可以看出是个源码目录,如下图: 以下图中是运行时环境. 它其实是一组jar包 ...
- 教你如何检查一个函数是否为JavaScript运行时环境内建函数
在开发过程中,对于某些API在现有的JavaScript运行时环境不支持的时候,我们大都会采用加入polyfill来解决这个问题.但有些时候我们可能需要知道现在某个API到底是否为运行时环境所原生支持 ...
随机推荐
- 配置中心Nacos
Nacos 是阿里巴巴2018年7月份开源的项目,如其名, Naming Configuration Service ,专注于服务发现和配置管理领域. Nacos 是什么?上面已经大概介绍了,更多详细 ...
- Exp3 免杀原理和实践
一.基础问题回答 1.杀软是如何检测出恶意代码的? (1)基于特征码的检测 特征码是能识别一个程序是一个病毒的一段不大于64字节的特征串.如果一个可执行文件包含这样的特征码则被杀毒软件检测为是恶意代码 ...
- Google SketchUp Cookbook: (Chapter 1) Making Multiple Copies
软件环境 SketchUp Pro 2018 参考书籍 Google SketchUp Cookbook http://shop.oreilly.com/product/9780596155100.d ...
- 使用原生JDBC循环读取文件并持久化到数据库
先上代码: package com.demo.common.service; import java.io.File; import java.io.FileInputStream; import j ...
- WebBrowser2控件使用
一 简介 这是一个IE实现的com接口, 简单的浏览一个网页可以用这个东西, 局限性是IE现在有好多版本, 不同版本对标准的支持是不一样的, 而且将来不排除windows把IE给干掉了 二 使用 1 ...
- RIDE创建工程和测试套件和用例--书本介绍的入门方法,自己整理实践下
1.选择File->New Project 2.弹出的New Project对话框,在Name文本框输入一个名词,如“TestProject-0805”,右侧选中“Directory”,选中建立 ...
- sqlserver查找使用了某个字段的所有存储过程
当一个系统中使用了很多的表,并且存在大量的存储过程,当数据库中的某个表删除了某个字段,那么相应的存储过程也需要改动,但是我们不知道哪些存储过程使用了该字段,那我们该怎么办?我们可以从之前的文档一个一个 ...
- SQL server 2008(Linux安装)
今天应公司的要求,需要在阿里云上安装sql server 在本地使用,由于自己原来没有涉及过这样的安装所以走了很多的弯路.现在将我的安装过程与大家分享,希望能够帮到想要学习这个方面的人.以下是我用Ce ...
- 观察者模式的python实现
什么会观察者模式?观察者模式就是订阅-推送模式.是为了解耦合才会被利用起来的设计模式. 经典的就是boss 前台和员工之间的故事.一天A员工在看电影,B员工在看动漫,但是两人担心boss来了,自己没及 ...
- gentoo virtual couldnt download
今天在更新系统的时候,提示 virtualbox-bin 从原始地址下载不了,经过一番摸索,通过下面的方式即可正常安装. http://download.virtualbox.org/virtualb ...