Flink集群架构

Flink集群架构

Flink采用Master-Slave架构,其中JobManager作为集群Master节点,主要负责任务协调和资源分配,TaskWorker作为Salve节点,用于执行流task。除了JobManager和TaskManager,还有一个重要的角色就是Client。Client虽然不是Flink Cluster 运行态的一部分,但也是Flink重要组件之一,用来提交流任务。

Flink集群之间的通信,是通过Akka Actor System来进行管控通信的。包括Client-JobManager和JobManager-TaskManager,而TaskManager之间的数据交换,是基于Netty实现的。

集群架构

Client

Client主要作用是将批或流应用程序编译成Dataflow Graph(也就是JobGraph),然后将其提交给JobManager。详细来看,Client主要功能如下:

  • 执行Application 的Main方法。

  • Generate JobGraph。将用户编写的application code(DataStream/DataSet/SQL/Table API)代码翻译成JobGraph。

  • Optimize JobGraph。比如将进行Operator Chain,能够减低数据延迟的同时增加系统吞吐。

  • 提交JobGraph和dependency jar到JobManager。

JobManager

JobManager负责协调Flink application的分布式执行,比如task调度、Checkpoint协调、Failover协调等等。具体功能如下:

  • JobGraph -> Execution Graph。接收Client的JobGraph后,将逻辑执行图JobGraph转换为物理执行图ExecutionGraph。

  • Job分发(Job dispatcher)。

  • Task的部署和调度。

  • Checkpoint Coordinator。

  • Recovery metadata。

其中JobManager内部主要功能组件如下:

  • ResourceManager。ResourceManager负责Flink cluster中的资源调配工作,而资源调配的基本单位就是task slot。Flink为不同的环境和资源提供者(比如YARN、Mesos、Kubernetes和standalone cluster)提供了多种实现。比如在standalone部署环境下,ResourceManager只能分配可用TaskManager的task slot,不能去启动一个新的TaskManager。

  • Dispatcher。Dispatcher提供了一个REST接口来让Client提交任务,并为提交的任务启动一个新的JobMaster。同时Dispatcher还未任务提供了Flink WebUI来展示任务执行信息。

  • JobMaster。JobMaster负责管理和执行单个JobGraph。Flink Cluster能够同时运行多个job,每个job都有自己的JobMaster。

一个Flink Cluster至少有一个JobManager,在高可用部署模式下,可以有多个JobManager,但是只能有一个JobManager为leader,其它都为standby。

TaskManager

TaskManager主要用于执行Dataflow的task,并且缓冲和交换数据流。TaskManager中的task slot是集群的最小资源调度单位。TaskManager中的task slot数量,代表了该TaskManager所能并发处理的task数量。

TaskManager的主要功能如下:

  • 执行task(Task Execution)。

  • 数据交换(Network manager)。

  • 内存管理(包括类型系统、数据序列化和反序列化)。

  • 向JobManager中的ResourceManager注册自己,以便ResourceManager进行task调度。

  • 向ResourceManager发送心跳。

上面的Client、JobManager和TaskManager中都有一个相同的组件,就是Actor System。Akka Actor System用于节点之间消息传输。

Task

对于分布式任务执行,Flink会将能够chain到一起的operator放到一个Task中来执行,每个Task由一个Thread来执行。

将可以chain到一起的operator放到一个task执行,是一种非常有效的优化手段。因为它能够减少线程到线程的切换开销和缓存开销,能够降低延迟的同时增加吞吐量。

JobGraph

上图是Application Dataflow的JobGraph,最上面是Dataflow的逻辑视图JobGraph,下面是带有并发语义的JobGraph。Task代表Dataflow中operator执行任务,而SubTask代表同一Operator(或Chain operator)的并发任务,比如上面的source-map chain operator代表一个task,source-map[1]代表该task的subtask。

Task Slot

Flink集群中的每个TaskManager是一个JVM进程,TaskManager能够执行一个或多个task。而TaskManager能够执行多少task,就是通过task slot来表示的。

每个task slot代表TaskManager中的固定资源子集,比如TaskManager中有3个task slot,则每个task slot所分配的资源为TaskManager所管理内存的1/3。需要注意的是,这里只隔离了内存,像CPU、I/O等资源都没有做隔离。

slot

如果一个TaskManger只有一个task slot的话,意味着每个task group(之所以称为组,是因为task slot会被共享)是JVM进程级别的隔离。而一个TaskManager如果有多个Task slot,则这些task之间能够共享JVM资源,比如TPC链接、心跳信息等;同时也可以共享数据集和数据结构,从而减少每个task的负载。

对于默认情况下,Flink是允许不同task的subtask共享slot的,只要它们属于同一job即可。通过共享slot,一个slot就可以容纳一个job的整个pipeline,比如下面第一个TaskManager中的第一个Task Slot,被source-map[1]、keyby-window[1]和sink[1]整个pipeline所共享,这样整个最大限度的减少数据跨线程/进程的数据通信。

slot共享

共享slot除了可能执行整个pipline外,还有以下两个优点:

  1. Flink集群只要保证slot总数与job中最大的并发度一致即可,无需计算job中所有task总和。
  2. 提升集群资源利用率。避免非密集型计算task(比如source-map)和密集型计算task(比如window)使用相同的资源。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容