zoukankan      html  css  js  c++  java
  • Flink 运行时架构

    参考链接:https://blog.csdn.net/dajiangtai007/article/details/88575553

    1、Flink 运行时架构

    Flink 运行时架构主要包含几个部分:Client、JobManager(master节点)和TaskManager(slave节点)。

    一、

    Client:Flink作业在哪台机器上面提交,那么当前机器称之为Client。用户开发的Program 代码,它会构建出 DataFlow graph,然后通过Client提交给JobManager。

    JobManager:是主(master)节点,相当于YARN里面的ResourceManager,生产环境中一般可以做HA高可用。

    JobManager会将任务进行拆分,调度到TaskManager上面执行。

    TaskManager:是从节点(slave),TaskManager才是真正实现task的部分。

    Client 提交作业到JobManager,就需要跟JobManager进行通信,它使用 Akka 框架或者库进行通信,另外Client与JobManager进行数据交互,使用的是

    Netty框架。AKKA通信基于 Actor System,Client可以向JobManager发送指令,比如Submit job 或者 Cancel/update job。

    JobManager 也可以反馈信息给Client,比如status updates,Statistics和results。

    Client提交给JobManager的是一个Job,然后JobManager将job拆分成task,提交给TaskManager(worker)。

    JobManager与TaskManager也是基于Akka进行通信,JobManager发送指令,比如 Deploy/Stop/Cancel Tasks或者触发CheckPoint,

    反过来TaskManager也会跟JobManager 通信返回Task Status,Heartbeat(心跳),Statistics等。另外TaskManager之间的数据通过网络进行传输,

    比如 Data Stream做一些算子的操作,数据往往需要在TaskManager之间做数据传输。

    TaskManager Slot

     TaskManager是进程,他下面运行的task(整个Flink应用是Job,Job可以拆分成很多task)是线程,每个task/subtask(线程)下可运行

    一个或者多个operator,即 OperatorChain。Task是class,抽象的;subtask是Object,具体的。(这样类比学习。)

    一个TaskManager通过Slot(任务槽)来控制它上面可以接受多少个task,比如一个TaskManager划分了3个Task Slot(仅限内存托管,目前CPU未做隔离),

    它只能接受3个task。Slot均分TaskManager所托管的内存,比如一个TaskManager有6g 内存,那么每个Slot分配2G。

    同一个TaskManager中的task共享TCP连接(通过多路复用)和心跳消息。它们还可以共享数据集和数据结构,从而减少每个任务的开销。

    一个TaskManager有N个槽位只能接受N个Task吗?不是,后面会说共享槽位。

    二、

    OperatorChain && Task

    为了更高效的分布式执行,Flink会尽可能的将 operator的subtask链接(chain)在一起形成task。

     数据流(逻辑视图)

    创建Source(并行度设置为1)读取数据源,数据经过FlatMap(并行度设置为2)做转换操作,然后数据经过Key Agg(并行度设置为2)做聚合操作,

    最后经过Sink(并行度设置为2)将数据输出。

    数据流(并行化视图)

    并行度为1的Source读取数据源,然后FlatMap并行度为2读取数据源进行转化操作,然后数据经过Shuffle交给并行度为2的Key Agg进行聚合操作,

    然后并行度为2的Sink将数据输出,未优化前的task总和为7。

    数据流(优化后的视图)

    并行度为1的Source读取数据源,然后FlatMap并行度为2读取数据源进行转化操作,然后数据经过Shuffle交给Key Agg进行聚合操作,

    此时Key Agg和Sink操作合并为一个task(注意:将KeyAgg和Sink两个operator进行了合并,因为这两个合并后并不会改变整体的拓扑结构),

    它们一起的并行度为2,数据经过Key Agg和Sink之后将数据输出,优化后的task总和为5。

  • 相关阅读:
    性能测试流程
    N种自动化测试框架(包含自动化和性能,总有一款适合你)
    自动化测试框架:jmeter + maven+ jenkins
    oracle中删除表:drop、delete、truncate
    SpringBoot开发mockserver及生成swagger接口文档
    五步法颈椎病自我按摩图解
    自动化必备:自动化持续集成环境搭建(上):git + maven + jenkins
    玩转jmeter:beanshell必备技能
    EFK-2:ElasticSearch高性能高可用架构
    MySQL5.7之在线DDL不会锁表
  • 原文地址:https://www.cnblogs.com/ssqq5200936/p/12288528.html
Copyright © 2011-2022 走看看