文档章节

Flink分布式运行环境

huxihx
 huxihx
发布于 2017/05/23 16:43
字数 1111
阅读 103
收藏 1

任务和操作算子链接(operator chain)

    分布式执行过程中,Flink会将操作算子子任务(subtask)链接成一个个具体的任务(task),在不同的线程中执行。链接操作算子在一起实际上是个优化:减少了线程间传递与缓存的开销,从而提升了TPS还减少了延时。下图即表示了5个子任务链接的情况:

Job Manager, Task Manager, 客户端

Flink运行时由两类进程组成:

  • JobManager——也被称为master。负责协调分布式的执行。它们负责调度任务,协调检查点以及处理失败后的恢复。Flink集群中至少要有一个JobManager,高可用方案是配置多个JobManager,其中的一个被选择leader,其他充当standby
  • TaskManager——也被称为worker。执行数据流的任务以及缓存和交换数据流。集群中至少有一个TaskManager

    JobManager和TaskManager有多种启动方式:直接在机器上运行命令,或者在容器中或者由资源调度框架管理,比如YARN。TaskManager连接JobManager,向后者证明它们已经可用了,并且已经可以工作了。

    客户端本身不是运行时和程序执行的一部分,但被用于发送数据流给JobManager。客户端可以是一个Java程序,也可以是命令行启动的程序,比如bin/flink run....

 

任务槽和资源

    每个worker(TaskManager)是一个JVM进程,并且使用多个线程执行subtask。每个worker都会配置若干个任务槽来控制worker能够接收的最大任务数。每个任务槽代表了TaskManager的固定部分的资源。举个例子,一个TaskManager有3个槽,那么每个槽都会被分配1/3的内存。将资源划分到多个槽中意味着某个subtask并不会与其他的进行竞争,而只是使用分配给自己的内存。注意目前不支持CPU隔离,当前只是针对内存资源进行划分。

    用户通过调整任务槽数来定义subtask被隔离的方式。每个TaskManager一个槽表示每个任务组运行在一个单独的JVM中。如果有多个槽则表示同一个JVM下共享多个subtask。相同的JVM中的任务共享TCP连接和心跳消息。它们还共享数据集合和数据结构,因此也减少了任务内的开销。

    默认情况下,Flink允许subtask共享多个槽位,即使它们是属于不同task的subtask。结果就是一个槽可能保存整个任务的数据管道逻辑。槽共享有两个主要的好处:

  • Flink集群的槽位数需要和整个任务中最大的并行度相同
  • 可以获得更好的资源利用率。如果没有槽共享,source/map的subtask可能会阻塞很多资源;但如果有了槽共享,增加基础的并行度会产生更好的槽利用率,同时还能确保执行逻辑重的subtask可以被均匀地分配在TaskManager中

    Flink API同时还包含了一个资源组机制用于阻止槽位被过分滥用。比较推荐的做法是将任务槽数设置成CPU核数。特别是有了超频后,每个槽都可以执行2个或更多个硬件线程。

状态后端存储

    状态以KV索引的方式被保存在状态后端存储上,该存储既可以是内存中的hashmap,也可以是RocksDB。另外状态后端存储还需要实现逻辑以接收状态的快照并作为checkpoint的一部分进行保存。

保存点(Savepoints)

    DataStream API写成的程序是可以从一个savepoint中恢复的。Savepoints既可以更新你的程序也可以更新更新整个集群。Savepoint就是手动触发的checkpoint,对程序打快照并写入后端存储。主要还是依赖于checkpoint机制。在执行过程中,程序会在worker节点上定期打快照并创建checkpoint。在恢复时只有最新的checkpoint会被使用,而老的checkpoint可以被安全地删除。Savepoint类似于那些定期的checkpoint,只是它们是由用户触发创建的。即使产生新的savepoint,老的也不会自动地过期

© 著作权归作者所有

huxihx
粉丝 1
博文 18
码字总数 30674
作品 0
东城
程序员
私信 提问
Flink从入门到放弃(入门篇2)-本地环境搭建&构建第一个Flink应用

戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Flink中的窗口 9-Flink中的Time Flink时间戳和水印 Br...

王知无
05/11
0
0
Flink技术源码解析(一):Flink概述与源码研读准备

一、前言 Apache Flink作为一款高吞吐量、低延迟的针对流数据和批数据的分布式实时处理引擎,是当前实时处理领域的一颗炙手可热的新星。关于Flink与其它主流实时大数据处理引擎Storm、Spark...

binggozhan
2018/06/06
0
0
[Flink]Flink1.3 Batch指南一 本地运行

Flink可以在单台机器上运行,甚至可以在单个Java虚拟机中运行。 这运行机制可以方便用户在本地测试和调试Flink程序。本节概述了Flink的本地执行机制。 本地环境和执行器(executors)允许你可以...

sjf0115
2017/10/23
0
0
《从0到1学习Flink》—— Flink 项目如何运行?

前言 之前写了不少 Flink 文章了,也有不少 demo,但是文章写的时候都是在本地直接运行 Main 类的 main 方法,其实 Flink 是支持在 UI 上上传 Flink Job 的 jar 包,然后运行得。最开始在第一...

火力全開
03/18
117
0
Flink1.8实时数仓项目实战

《Flink1.8实时数仓项目实战》课程主要基于Flink最新稳定版本进行讲解,课程包含Flink DataSet、容错、Connector、Flink SQL以及实时数仓项目。希望通过本课程的学习,大家能快速掌握Flink 批...

小红牛
08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部