浅谈Flink架构及拓扑图

这篇具有很好参考价值的文章主要介绍了浅谈Flink架构及拓扑图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

01 引言

声明本文是博主阅读云邪(Jark)博客整理后的笔记,如有侵权,可联系博主删除。

本文参考文章如下:

  • https://wuchong.me/blog/2016/05/03/flink-internals-overview/
  • https://wuchong.me/blog/2016/05/04/flink-internal-how-to-build-streamgraph/
  • https://wuchong.me/blog/2016/05/10/flink-internals-how-to-build-jobgraph/
  • https://developer.aliyun.com/article/225618#

02 Flink架构

无论是flink on yarn 还是flink on kubernetes等其它模式,最终Flink启动成功之后的架构图如下:
浅谈Flink架构及拓扑图,# BMS项目实战记录,# Flink,flink,架构,大数据
从上述架构图,可以看到主要分为如下三个模块(且三者均为独立的JVM进程):

模块 描述
Client 是一个用于管理Flink作业的客户端(提交、取消、监听状态以及采集指标),只要确保与JobManager环境联通即可
JobManager 接收来自Client的请求并生成执行计划,并以task为单元,调度到各个TaskManager去执行,同时协调taskcheckpoint,以及接收来自TaskManager的状态、心跳、统计等
TaskManager 在启动的时候就设置好了槽位数(Slot),每个 slot 能启动一个 TaskTask 为线程,注意有可能不同的Job/Task混合在一个TaskManager进程中,因为Flink的任务调度是多线程模型的

我们注意到了,JobManager接收到Client的请求之后,会生成执行计划,也就是对应上图的Dataflow Graph,这一块在flink中比较核心,也是下面继续讲讲的Flink 拓扑结构。

03 Flink拓扑结构

我们上传Flink SDK里面的/examples/streaming/TopSpeedWindowing.jarFlink集群之后,点击“show plan”可以看到执行计划图:
浅谈Flink架构及拓扑图,# BMS项目实战记录,# Flink,flink,架构,大数据
执行计划图如下:
浅谈Flink架构及拓扑图,# BMS项目实战记录,# Flink,flink,架构,大数据
当然,也可以在TopSpeedWindow的主程序里,直接获取执行计划的jsonExecutionEnvironment.getExecutionPlan()),并复制json至https://wints.github.io/flink-web//visualizer/(官网的生成plan地址挂了,这里是博主另外找的),json如下:

{
  "nodes" : [ {
    "id" : 1,
    "type" : "Source: Custom Source",
    "pact" : "Data Source",
    "contents" : "Source: Custom Source",
    "parallelism" : 1
  }, {
    "id" : 2,
    "type" : "Timestamps/Watermarks",
    "pact" : "Operator",
    "contents" : "Timestamps/Watermarks",
    "parallelism" : 1,
    "predecessors" : [ {
      "id" : 1,
      "ship_strategy" : "FORWARD",
      "side" : "second"
    } ]
  }, {
    "id" : 4,
    "type" : "Window(GlobalWindows(), DeltaTrigger, TimeEvictor, ComparableAggregator, PassThroughWindowFunction)",
    "pact" : "Operator",
    "contents" : "Window(GlobalWindows(), DeltaTrigger, TimeEvictor, ComparableAggregator, PassThroughWindowFunction)",
    "parallelism" : 10,
    "predecessors" : [ {
      "id" : 2,
      "ship_strategy" : "HASH",
      "side" : "second"
    } ]
  }, {
    "id" : 5,
    "type" : "Sink: Print to Std. Out",
    "pact" : "Data Sink",
    "contents" : "Sink: Print to Std. Out",
    "parallelism" : 10,
    "predecessors" : [ {
      "id" : 4,
      "ship_strategy" : "FORWARD",
      "side" : "second"
    } ]
  } ]
}

执行图如下:
浅谈Flink架构及拓扑图,# BMS项目实战记录,# Flink,flink,架构,大数据

3.1 Flink的四层执行图

到这里,会有很多小伙伴会有疑问,咋这么多图呢?实际上可能更多,但是,Flink 按执行流程,执行图可以分为四层:StreamGraph → JobGraph → ExecutionGraph → 物理执行图

浅谈Flink架构及拓扑图,# BMS项目实战记录,# Flink,flink,架构,大数据
这里博主整理了每种“图”的概念,方便大家的理解:

概念 备注
StreamGraph 用户通过 Stream API 编写的代码生成的最初的图 用来表示程序的拓扑结构。这里还提下 OptimizedPlan,它是由 Batch API转换而来的,StreamGraph 是由Stream API 转换而来的,而BatchStream 的图结构和优化方法有很大的区别,所以分开了。
JobGraph StreamGraph经过优化后生成了JobGraph,提交给 JobManager的数据结构 主要的优化为,将多个符合条件的节点 chain 在一起作为一个节点,这样可以减少数据在节点之间流动所需要的序列化/反序列化/传输消耗
ExecutionGraph JobManager 根据JobGraph 生成ExecutionGraph ExecutionGraphJobGraph的并行化版本,是调度层最核心的数据结构
物理执行图 JobManager 根据 ExecutionGraphJob 进行调度后,在各个TaskManager上部署 Task 后形成的“图”,并不是一个具体的数据结构 物理执行图就是最终分布式在各个机器上运行着的tasks

3.2 执行图细节

Job的不同阶段都有不同的执行流程图,其目的都是为了解耦,细节流程图如下:
浅谈Flink架构及拓扑图,# BMS项目实战记录,# Flink,flink,架构,大数据
这里针对上述细节的流程图再做每一部分的名词解释。

StreamGraph:根据用户通过 Stream API 编写的代码生成的最初的图

名词 概念
StreamNode 用来代表 operator 的类,并具有所有相关的属性,如并发度、入边和出边等
StreamEdge 表示连接两个StreamNode的边

JobGraph:StreamGraph经过优化后生成了 JobGraph,提交给 JobManager 的数据结构

名词 概念
JobVertex 经过优化后符合条件的多个StreamNode可能会chain在一起生成一个JobVertex,即一个JobVertex包含一个或多个operator,JobVertex的输入是JobEdge,输出是IntermediateDataSet
IntermediateDataSet 表示JobVertex的输出,即经过operator处理产生的数据集。producer是JobVertex,consumer是JobEdge
JobEdge 代表了job graph中的一条数据传输通道。source 是 IntermediateDataSet,target 是 JobVertex。即数据通过JobEdge由IntermediateDataSet传递给目标JobVertex

ExecutionGraph:JobManager 根据 JobGraph 生成ExecutionGraph。ExecutionGraph是JobGraph的并行化版本,是调度层最核心的数据结构。

名词 概念
ExecutionJobVertex 和JobGraph中的JobVertex一一对应。每一个ExecutionJobVertex都有和并发度一样多的 ExecutionVertex
ExecutionVertex 表示ExecutionJobVertex的其中一个并发子任务,输入是ExecutionEdge,输出是IntermediateResultPartition
IntermediateResult 和JobGraph中的IntermediateDataSet一一对应。一个IntermediateResult包含多个IntermediateResultPartition,其个数等于该operator的并发度
IntermediateResultPartition 表示ExecutionVertex的一个输出分区,producer是ExecutionVertex,consumer是若干个ExecutionEdge
ExecutionEdge 表示ExecutionVertex的输入,source是IntermediateResultPartition,target是ExecutionVertex。source和target都只能是一个
Execution 是执行一个 ExecutionVertex 的一次尝试。当发生故障或者数据需要重算的情况下 ExecutionVertex 可能会有多个 ExecutionAttemptID。一个 Execution 通过 ExecutionAttemptID 来唯一标识。JM和TM之间关于 task 的部署和 task status 的更新都是通过 ExecutionAttemptID 来确定消息接受者。

物理执行图:JobManager 根据 ExecutionGraph 对 Job 进行调度后,在各个TaskManager 上部署 Task 后形成的“图”,并不是一个具体的数据结构。

名词 概念
Task Execution被调度后在分配的 TaskManager 中启动对应的 Task。Task 包裹了具有用户执行逻辑的 operator
ResultPartition 代表由一个Task的生成的数据,和ExecutionGraph中的IntermediateResultPartition一一对应
ResultSubpartition 是ResultPartition的一个子分区。每个ResultPartition包含多个ResultSubpartition,其数目要由下游消费 Task 数和 DistributionPattern 来决定
InputGate 代表Task的输入封装,和JobGraph中JobEdge一一对应。每个InputGate消费了一个或多个的ResultPartition
InputChannel 每个InputGate会包含一个以上的InputChannel,和ExecutionGraph中的ExecutionEdge一一对应,也和ResultSubpartition一对一地相连,即一个InputChannel接收一个ResultSubpartition的输出

3.3 更多

本文仅仅是浅显的谈了Flink架构和拓扑,如果想对每一种“”有一个更清晰的认识,可以参考:文章来源地址https://www.toymoban.com/news/detail-824801.html

  • 《如何生成 StreamGraph?》
    https://wuchong.me/blog/2016/05/04/flink-internal-how-to-build-streamgraph/
  • 《如何生成 JobGraph?》
    https://wuchong.me/blog/2016/05/10/flink-internals-how-to-build-jobgraph/
  • 《如何生成ExecutionGraph及物理执行图?》
    https://developer.aliyun.com/article/225618#

到了这里,关于浅谈Flink架构及拓扑图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 医院网络设计(完整文档+思科拓扑图)

    大家好,我是小华学长,一名计算机领域的博主。经过多年的学习和实践,我积累了丰富的计算机知识和经验,在这里我想与大家分享我的学习心得和技巧,帮助你成为更好的程序员。 作为一名计算机博主,我一直专注于编程、算法、软件开发等领域,在这些方面积累了大量

    2024年02月07日
    浏览(32)
  • 住宅小区的拓扑规划与网络设计(完整文档+ensp拓扑图)

    大家好,我是小华学长,一名计算机领域的博主。经过多年的学习和实践,我积累了丰富的计算机知识和经验,在这里我想与大家分享我的学习心得和技巧,帮助你成为更好的程序员。 作为一名计算机博主,我一直专注于编程、算法、软件开发等领域,在这些方面积累了大量

    2024年02月04日
    浏览(30)
  • ENSP安装以及简单配置一个拓扑图

    ENSP学习心得 eNSP软件安装    安装eNSP之前必须先安装以下三个插件: VirtualBox WinPcap Wireshack eNSP作为模拟器主体,需要对应版本的VirtualBox和WinPcap提供虚拟环境,Wireshack用于实验当中测试抓取数据包使用。 安装好这三个插件,只需要点下一步选择好对应的安装位置即可,然后

    2024年02月11日
    浏览(41)
  • 一个小时学会画网络拓扑图(附标准素材)

    一,常见的网络拓扑图图标 二,核心交换机,汇聚交换机,接入交换机的区别? 三,核心交换机,汇聚交换机,接入交换机如何使用? 一、核心层交换机和汇聚层交换机区别 1、功能区别 2、性能区别 核心层交换机是三层交换机,高速转发,有大容量接口带宽(比如万兆接口),较

    2023年04月21日
    浏览(20)
  • threejs 3d网络设备拓扑图绘制示例

    技能点:threejs,Vue,canvas,几何数学。 展示网站:http://jstopo.top 模型上方图标贴图 canvas文字贴图

    2024年02月15日
    浏览(28)
  • 基于ensp校园网络(完整文档+ensp拓扑图)

    大家好,我是小华学长,一名计算机领域的博主。经过多年的学习和实践,我积累了丰富的计算机知识和经验,在这里我想与大家分享我的学习心得和技巧,帮助你成为更好的程序员。 作为一名计算机博主,我一直专注于编程、算法、软件开发等领域,在这些方面积累了大量

    2024年02月04日
    浏览(32)
  • Python 利用MNE实现自定义矩阵大脑拓扑图的绘制

    在使用MNE进行EEG信号的可视化操作时,往往需要导入对应电极的位置信息,MNE中有内置的常见电极布局系统,通过调用下面指令进行导入: 从上面的输出可以看出,MNE中共有27个可用的电极布局系统,具体选择哪一个要看你采集数据时使用的脑电帽电极布局系统是哪个。 2.

    2024年02月05日
    浏览(24)
  • 中小型超市的网络规划与设计(完整文档+思科拓扑图)

    大家好,我是小华学长,一名计算机领域的博主。经过多年的学习和实践,我积累了丰富的计算机知识和经验,在这里我想与大家分享我的学习心得和技巧,帮助你成为更好的程序员。 作为一名计算机博主,我一直专注于编程、算法、软件开发等领域,在这些方面积累了大量

    2024年02月03日
    浏览(32)
  • 前端流程图框架11个:开发组态图、思维导图、拓扑图必备

    在前端开发中,实现流程图通常涉及以下几个方面: HTML 结构 :使用 HTML 标签来定义流程图的结构,如使用 div 元素表示节点,使用 svg 元素表示连接线等。 CSS 样式 :使用 CSS 样式来定义流程图的外观,包括节点的样式、连接线的样式、文本的样式等。可以使用 CSS 属性来设

    2024年04月15日
    浏览(52)
  • 基于OSPF技术的某企业网络设计(完整文档+ENSP拓扑图)

    大家好,我是小华学长,一名计算机领域的博主。经过多年的学习和实践,我积累了丰富的计算机知识和经验,在这里我想与大家分享我的学习心得和技巧,帮助你成为更好的程序员。 作为一名计算机博主,我一直专注于编程、算法、软件开发等领域,在这些方面积累了大量

    2024年02月04日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包