Flink源码解析(1)job启动,从JM到TM过程详解

网络传输模型

首先在看之前,回顾一下akka模型:

Flink通讯模型—Akka与Actor模型-CSDN博客

注:ActorRef就是actor的引用,封装好了actor

下面是jm和tm在通讯上的概念图:

RpcGateway

不理解网关的作用,可以先移步看这里:网关_百度百科 (baidu.com)

  1. 用于定义RPC协议,是客户端和服务端沟通的桥梁。
  2. 服务端实现了RPC协议,即实现了接口中定义的方法,做具体的业务逻辑处理
  3. 客户端实现了RPC协议,客户端是Proxy生成的代理对象,将对RpcGateway接口方法的调用转为Akka的消息发送。
  4. 关注其5个子接口:DispatcherGateway、ResourceManagerGateway、JobMasterGateway、MetricQueryServiceGateway、TaskExecutorGateway。

RpcEndpoint

  1. RPC服务端的抽象,实现了该接口即为Rpc服务端,是Akka中Actor的封装。
  2. Actor收到ActorRef发送的消息(消息被封装为RpcInvocation对象),会通过RpcInvocation对象中的方法、参数等信息以反射的方式调用RpcGateway接口对应的方法。
  3. 关注其5个实现类:Dispatcher、ResourceManager、JobMaster、MetricQueryService、TaskExecutor。其中Dispatcher、ResourceManager、JobMaster是JobManager进程中的Rpc服务,TaskExecutor是TaskManager进程中的Rpc服务,MetricQueryService在JobManager和TaskManager进程中都有。

其中五个最重要的接口的介绍:

  1. Dispatcher:
    • 作用: 1.可以跨作业运行,它为应用提交提供了REST接口。 2.当一个应用被提交执行时,分发器就会启动一个新的JobMaster组件并将应用提交给它。 3.Dispatcher他会启动一个WebUi,用来方便地展示和监控作业执行的信息。
  2. ResourceManager:
    • 作用: 管理集群中的资源。ResourceManager 负责监控集群中的可用资源,并根据需要分配资源给作业。它协调 TaskManager 的启动和关闭,以及资源的分配和释放。
  3. JobMaster:
    • 作用: 对作业进行管理和调度。JobMaster 是每个作业的主节点,负责协调作业的执行过程。它与 ResourceManager 通信以获取资源,并与 TaskExecutor 通信以启动、管理和监控作业的任务。
  4. MetricQueryService:
    • 作用: 提供度量指标的查询服务。MetricQueryService 允许用户查询作业和任务的度量信息,例如吞吐量、延迟、状态大小等。它是用于监控和管理作业性能的重要组件。
  5. TaskExecutor:
    • 作用: 在 TaskManager 上执行作业任务。TaskExecutor 负责执行 TaskManager 上的任务,并与 JobMaster 通信以接收作业的任务和指令。它管理任务的执行状态、资源分配和失败处理。

RpcService

  1. 是 RpcEndpoint 的运行时环境,是Akka中ActorSystem的封装
  2. 一个ActorSystem系统中有多个Actor,同样在Flink中一个RpcService中有多个RpcEndpoint,即多个Rpc服务。
  3. Flink中RpcService也有多套,JobManager和TaskManager进程中都有两套RpcService。
  4. RpcService 提供了启动Rpc服务(startServer)、停止Rpc服务(stopServer)、连接远端Rpc服务等方法
  5. 实现类是AkkaRpcService,内有属性ActorSystem actorSystem,Map<ActorRef, RpcEndpoint> actors。

RpcServer

是Rpc服务端自身的代理对象,设计上是供服务端调用自身非Rpc方法。

了解完flink通讯模型的基本接口概念,接下来回顾一下flink的基本架构图:

客户端不是运行时和程序执行的一部分,但用于准备数据流并将其发送到JobManager。之后,客户端可以断开连接(分离模式 detached mode),或者保持连接以接收进度报告(附加模式 attached mode)。客户机可以作为触发执行的Java/Scala程序的一部分运行,也可以在命令行使用./bin/flink run...开启进程中运行。

JobManager和taskmanager可以以各种方式启动:作为独立集群直接在机器上启动,或者在容器中启动,或者由YARN或Mesos等资源框架管理。TaskManagers连接到JobManagers,宣布它们是可用的,并分配工作。

由于篇幅有限,这里我们主要关注下TaskManager的相关内容,关于JobManager的后面再具体来分析。

TaskManager

TaskManager就是执行数据流中任务以及缓冲和交换数据流的worker。必须始终至少有一个TaskManager。任务管理器中资源调度的最小单元是任务槽。任务管理器中的任务槽数表示并发处理任务的数量。注意,多个操作算子可能在一个任务槽中执行。

每个worker (TaskManager)都是一个

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/755472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】【Pandas】详解Pandas模块常用函数

1. pandas简介 Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来,享有数据分析“三剑客之一”的盛名(NumPy、Matplotlib、Pandas)。Pandas 已经成为 Python 数据分析的必备高级工具,它的目标是成为强大、灵活、可以支持任何编程语言的数据分…

torchvision pytorch预训练模型目标检测使用

参考&#xff1a; https://pytorch.org/vision/0.13/models.html https://blog.csdn.net/weixin_42357472/article/details/131747022 有分类、检测、分割相关预训练模型 1、目标检测 https://pytorch.org/vision/0.13/models.html#object-detection-instance-segmentation-…

四.流程控制(顺序,分支,循环,嵌套)

c刚刚转过来的记得写在public static void main&#xff08;String[] args&#xff09;的花括号里 一.顺序结构 二.分支结构 if &#xff0c;switch 1.if (条件判断&#xff09; 2.if else 3.if else if else if ... else(它是一个一个否定来一个个执行判断的 4.s…

以太坊开发学习-solidity(三)函数类型

目录 函数类型 函数类型 solidity官方文档里把函数归到数值类型 函数类型是一种表示函数的类型。可以将一个函数赋值给另一个函数类型的变量&#xff0c; 也可以将一个函数作为参数进行传递&#xff0c;还能在函数调用中返回函数类型变量。 函数类型有两类&#xff1a;- 内部&…

什么是虚拟dom

Virtual DOM&#xff08;虚拟DOM&#xff09; 就是由普通的 JS 对象来描述DOM对象&#xff0c;因为不是真实的DOM对象&#xff0c;所以叫 Virtual DOM。 虚拟DOM就是使用一个虚拟的 DOM 树来描述真实的 DOM 树结构和节点属性&#xff0c;通过比较新旧两颗虚拟 DOM 树的差异&…

如何删除全局的某个字符并替换js

let cons data[i].content.replace(/\/uploads\//g, 要替换的字符串/);console.log(data[i]); 该代码是将data数组中每个元素的content属性值中的"/uploads/"替换为"http://bas.xingyuncm.cn/uploads/"。 其中&#xff0c;replace()方法是字符串的方法&am…

day-24 腐烂的橘子

思路&#xff1a;利用bfs的思想 首先利用bfs遍历值为2的橘子&#xff08;遍历时1和2都可以走&#xff09;结束后如果存在某个橘子未被访问过且值为1则返回-1 再利用bfs遍历值为2的橘子 每遍历一次 时间加1 注意不要立即将map的值变为2&#xff0c;可以通过一个缓存数组临时存放…

CentOS7使用Docker部署.net Webapi

1 准备WebApi项目 对于已存在的WebApi项目&#xff0c;需要添加Docker支持&#xff1b; 编码时&#xff0c;先设置好项目需要的端口号&#xff1a;program.cs中&#xff0c;app.Run("http://*:8000");设置端口为&#xff1a;8000在VS中&#xff0c;选中项目&#xf…

2024上半年软考报名3月18日已开启!报名流程来啦~

截止至3月15日11:00&#xff0c;河北、山东、西藏、兵团、云南、澳门、西安、陕西、辽宁、新疆、大连、青海、宁波公布了2024上半年软考报名时间。 不想一直盯着官网等报名&#xff0c;可以关注一波HCIE考证研究所&#xff0c;获得软考报名提醒哦&#xff01; 2024上半年软考…

作业:基于udp的tftp文件传输实例

#include <head.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <errno.h>#define PORT 69 //服务器绑定的端口号 #define IP "192.168.1.107" //服务器的IP地址int do_download(i…

使用JAXB生成XML的Java对象

文章目录 标题使用JAXB生成XML的Java对象根据xml生成xsd文件&#xff1a;下载trang.jar&#xff1a;使用trang.jar生成xml的xsd文件&#xff1a; 使用JAXB的xjc生成java对象&#xff1a; 标题使用JAXB生成XML的Java对象 根据xml生成xsd文件&#xff1a; 下载trang.jar&#x…

windows连接ssh/open ssh/FTP/远程打印工具

XShell工具集&#xff0c;可满足标题所列的需求&#xff0c;方便好用。 网址&#xff1a;https://www.xshell.com/zh/

如何在极狐GitLab Runner Job 添加域名host?

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 在极狐GitLab Runner Job 添加域名…

C 引用方式调用函数

通过引用传递方式&#xff0c;形参为指向实参地址的指针&#xff0c;当对形参的指向操作时&#xff0c;就相当于对实参本身进行的操作。 传递指针可以让多个函数访问指针所引用的对象&#xff0c;而不用把对象声明为全局可访问。 /* 函数定义 */ void swap(int *x, int *y) {…

MySQL进阶45讲【34】为什么临时表可以重名?

1 前言 在上一篇文章中&#xff0c;我们在优化join查询的时候使用到了临时表。当时&#xff0c;我们是这么用的&#xff1a; create temporary table temp_t like t1; alter table temp_t add index(b); insert into temp_t select * from t2 where b>1 and b<2000; se…

为什么我学了几天 STM32 感觉一脸茫然?

为什么我学了几天 STM32 感觉一脸茫然&#xff1f; 如果你只有C语言基础就马上学习STM32&#xff0c;你一定会有这些疑惑&#xff1a; 为什么有这么多没见过的API函数&#xff1f;没见过的变量&#xff08;寄存器&#xff09;名称&#xff1f; 为什么工程除了main.c&#xff…

机器人现有力控技术检索

文章目录 力控技术1 基本柔顺力控1.1 直接力控1.2 间接力控1.2.1 被动和主动柔顺控制1.2.2 混合力位控制1.2.3 阻抗&导纳力控1.2.3.1 原理1.2.3.2 区别和联系1.2.3.3 工程应用 1.2.4 阻抗力控1.2.5 导纳力控 2 先进力控2.1 自适应力控2.2 鲁棒力控2.3 学习力控 3 智能力控3…

深度学习神经网络训练环境配置以及演示

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 目录 1 NVIDIA Dr…

2024-3-18-C++day6作业

1>思维导图 2>试编程 要求: 封装一个动物的基类&#xff0c;类中有私有成员&#xff1a;姓名&#xff0c;颜色&#xff0c;指针成员年纪 再封装一个狗这样类&#xff0c;共有继承于动物类&#xff0c;自己拓展的私有成员有&#xff1a;指针成员&#xff1a;腿的个数&a…

为什么技术人员副业赚钱那么难?

公众号&#xff1a;小北技术圈。 34岁老程序员&#xff0c;长期探索副业项目&#xff0c;写过IDEA插件&#xff0c;搞过工具导航&#xff0c;做过出海网站&#xff0c;运营过自媒体。欢迎提前探索35岁程序员的第二赛道。 每周分享干货内容。寻找100个技术人员&#xff0c;聚在…