Flink源码之RPC
Flink是一个典型的Master/Slave分布式实时处理系统,分布式系统组件之间必然涉及通信,也即RPC,以下图展示Flink组件之间的关系:
RPCGateWay
一般RPC框架可根据用户业务类生成客户端和服务器端通信底层代码,此时只需定义业务类接口以及实现接口的业务逻辑,网络通信以及序列化反序列化这些繁琐的细节有框架屏蔽,flink中也是类似的原理,业务接口被抽象为RpcGateway, 比如:
- DispatcherGateway,接受客户端的请求,比如提交JobGraph,查询Job信息、触发Savepoint等
- JobMasterGateway,包含一个Job的元信息,调度执行Job
- ResourceManagerGateway,保存资源分配信息,主要是TaskManager中Slot分配情况
- TaskExecutorGateway,TaskManager核心功能,比如分配释放Slot、执行Task
- MetricQueryServiceGateway,提供查询Metric功能
这些接口的具体实现就是组件提供的核心功能
RPCEndPoint
组件间通信基于Actor, 负责RPC通信功能则被抽象成一个RPCEndPoint
RPCEndPoint将通信细节委托给一个全局RpcService,在RPCEndPoint构造时需传递一个RpcService实例,RpcService提供startServer/connect两个核心接口,具体实现为AkkaRpcService, 调用RpcService.startServer(RPCEndPoint)就会生成一个封装了RPCEndPoint的AkkaRpcActor, 该Actor可接受消息,提供RPC服务;
如果要与其他组件通信,则调用RpcService.connect(RpcGateway)获取一个可与远程Actor通信的Client,该Client是一个实现了RpcGateway的动态代理类,动态代理类内部通过AkkaInvocationHandler序列化RPC消息,发送给其他Actor, 从而实现这个RPC过程
整个过程有以下几个核心类:
- AkkaRpcService, 生成与其他组件进行通信的代理客户端以及启动一个AkkaRpcActor服务
- AkkaRpcActor, RPC服务端核心类,接受远程过程调用消息,反射调用RPCEndPoint的业务逻辑
- AkkaInvocationHandler, RPC客户端核心类,发送消息给本地AkkaRpcActor或序列化RPC消息, 发送给远程AkkaRpcActor
- RpcInvocation,封装RPC消息
Component
RpcEndPoint构造函数如下:
protected RpcEndpoint(final RpcService rpcService, final String endpointId) {this.rpcService = checkNotNull(rpcService, "rpcService");this.endpointId = checkNotNull(endpointId, "endpointId");this.rpcServer = rpcService.startServer(this); //核心this.mainThreadExecutor = new MainThreadExecutor(rpcServer, this::validateRunsInMainThread);
}
构造时传递一个RpcService, 同时会调用RpcService.startServer(this)方法,返回一个RPCServer实例,这样就将当前实例封装成一个AkkaRpcActor,这个Actor既能对外提供RPC服务,也能在本地通过返回的RpcServer向这个Actor发送消息。
因此实现一个具体的Component只要同时继承RpcGateway和RpcEndPoint就能实现将RpcGateway的业务接口暴露出去提供远程服务,在JobManager/TaskManger启动过程中,都是先创建一个RpcService实例,然后new出各个业务组件实例,这样各个组件完成初始化后就能各司其职,协调配合完成具体业务功能。
JobManager启动时两个核心组件:
- StandaloneDispatcher, 实现了DispatcherGateway
- StandaloneResourceManager, 实现了ResourceManagerGateway
TaskManger启动时核心组件:
- TaskExecutor, 实现了TaskExecutorGateway
源码中继承关系很容易看出它们都是继承自RpcEndPoint同时实现某个RpcGateWay接口。
相关文章:
![](https://img-blog.csdnimg.cn/3d18fc2ee14d49e59111fca1df48dbd6.png#pic_center)
Flink源码之RPC
Flink是一个典型的Master/Slave分布式实时处理系统,分布式系统组件之间必然涉及通信,也即RPC,以下图展示Flink组件之间的关系: RPCGateWay 一般RPC框架可根据用户业务类生成客户端和服务器端通信底层代码,此时只需定…...
![](https://img-blog.csdnimg.cn/006cbac7f2bb4cf78b21a2e17e53f058.gif)
【LeetCode 75】第二十四题(2390)从字符串中移除星号
目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 题目给我们一个字符串,然后字符串中包含星号*,要求每个星号消除一个从星号左边起最近的一个字符…...
![](https://img-blog.csdnimg.cn/2a5c8c42059146bba72c56d091455042.png)
通向架构师的道路之weblogic的集群与配置
一、Weblogic的集群 还记得我们在第五天教程中讲到的关于Tomcat的集群吗? 两个tomcat做node即tomcat1, tomcat2,使用Apache HttpServer做请求派发。 现在看看WebLogic的集群吧,其实也差不多。 区别在于: Tomcat的集群的实现为两个物理上…...
![](https://img-blog.csdnimg.cn/51a54a246eb442638c4d7f230a1c2979.png)
SpringBoot 项目创建与运行
一、Spring Boot 1、什么是Spring Boot?为什么要学 Spring Boot Spring 的诞生是为了简化 Java 程序的开发的,而 Spring Boot 的诞生是为了简化 Spring 程序开发的。 Spring Boot 翻译一下就是 Spring 脚手架 盖房子的这个架子就是脚手架,…...
![](https://img-blog.csdnimg.cn/img_convert/0fb1705957a619f421c941fa8f1a3ca8.png)
FOHEART H1数据手套:连接虚拟与现实,塑造智能交互新未来
在全新交互时代背景中,数据手套无疑是一种重要的科技产物。它不仅彻底改变了我们与虚拟世界的互动方式,更为我们提供了一种全新、更为直观的交互形式。 FOHEART H1数据手套结合了虚拟现实、手势识别等高新技术,用先进的传感技术和精准的数据…...
![](https://www.ngui.cc/images/no-images.jpg)
MyBatis学习笔记3
日志 1.日志工厂 如果一个数据库的操作,出现了异常,我们需要排错。日志就是最好的工具。 日志工厂:SLF4JLOG4J(掌握)LOG4J2JDK_LOGGINGCOMMONS_LOGGINGSTDOUT_LOGGING(掌握)NO_LOGGING 2.分页 减少数据…...
![](https://www.ngui.cc/images/no-images.jpg)
ES6学习-Symbol
Symbol 数据类型Symbol,表示独一无二的值。 对象的属性名可有两种类型,一种是原来的字符串,另一种是新增的 Symbol 类型 可以保证不与其他属性名产生冲突。 let s1 Symbol() let s2 Symbol() console.log(s1, s2, s1 s2)//Symbol() Sy…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.5/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N6B9)
【Redis】使用Docker镜像配置集群时的Operation timed out问题
不知道有没有小伙伴跟我一样是使用的Docker镜像进行Redis集群案例模拟的(三台虚拟机确实带不动 ),然后我遇到了一个问题:Could not connect to Redis at 172.17.0.2:6379: Operation timed out 172.17.0.2是我其中一个Redis实例的…...
![](https://img-blog.csdnimg.cn/faffaee6f2d647c4b0c6c3d75f3eac96.png)
Java 生产初学常用注解
目录 0. 基础语法逻辑运算符继承抛出异常获取数据方式泛型 1. 接收前端数据(controller)mybatis1. QueryWrapper获取和赋值 2. service 层注解 3. Dao 层(与数据库交互)3.1 mybatis-plus中BaseMapper 4. ELK框架es配置sql参数logs…...
![](https://img-blog.csdnimg.cn/8963ac4c0d1d4f92977c06ed49e28893.png)
mousedown拖拽功能(vue3+ts)
因为项目有rem适配,使用第三方插件无法处理适配问题,所有只能自己写拖拽功能了 拖拽一般都会想到按下,移动,放开,但是本人亲测,就在div绑定一个按下事件就行了(在事件里面写另外两个事件&#x…...
![](https://img-blog.csdnimg.cn/884a61ad17f041bf9ac0ebaf6fecf851.png#pic_center)
【论文阅读】基于深度学习的时序异常检测——TransAD
系列文章链接 数据基础:多维时序数据集简介 论文一:2022 Anomaly Transformer:异常分数预测 论文二:2022 TransAD:异常分数预测 论文链接:TransAD.pdf 代码库链接:https://github.com/imperial…...
![](https://www.ngui.cc/images/no-images.jpg)
NLPCC 出版部分相关源码记录
目录 Download Unzip Author Title Affiliation Check number of tex Zip Rename Delete Download import requests from bs4 import BeautifulSoup# 登录网站并获取登录后的 session def login(username, password):login_url https://example.com/loginsession re…...
![](https://img-blog.csdnimg.cn/bcf38efcc7d94faf8885f5dacec949ca.jpeg)
【Windbg】通过网络调试windows内核
环境 windows版本:win10_x64 1901 windbg版本:1.2306.12001.0 HOST 1、windbg软件设置。 点击菜单文件,然后如下图操作。 2、等待连接。 ************* Waiting for Debugger Extensions Gallery to Initialize **************>>&…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.5/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N6B9)
代码随想录算法训练营之JAVA|第二十四天| 93. 复原 IP 地址
今天是第24天刷leetcode,立个flag,打卡60天。 算法挑战链接 93. 复原 IP 地址https://leetcode.cn/problems/restore-ip-addresses/ 第一想法 题目理解:将一串数字字符串变成正确的ip格式的字符串。 这类题目是切分字符串,ip一…...
![](https://img-blog.csdnimg.cn/90cc82ee21594e57a1ed1c391d51f0b9.jpeg#pic_center)
网络安全 Day30-运维安全项目-堡垒机部署
运维安全项目-堡垒机部署 1. 运维安全项目-架构概述2. 运维安全项目之堡垒机2.1 堡垒机概述2.2 堡垒机选型2.3 环境准备2.4 部署Teleport堡垒机2.4.1 下载与部署2.4.2 启动2.4.3 浏览器访问teleport2.4.4 进行配置2.4.5 安装teleport客户端 2.5 teleport连接服务器 1. 运维安全…...
![](https://www.ngui.cc/images/no-images.jpg)
电脑文件夹备份命令
电脑文件夹备份 cmd窗口输入shell:startup 将备份.bat文件放到,自启动文件夹下 bat文件内容写以下就可以了 Xcopy "D:\文件\" "F:\文件备份\" /E/H/C/I/y...
![](https://img-blog.csdnimg.cn/3e22247b2dea43518245cd9679f04607.png)
RocketMQ Learning(一)
目录 一、RocketMQ 0、RocketMQ的产品发展 1、RocketMQ安装 1.1、windows下的安装 注意事项 1.2、Linux下的安装 1.3、源码的安装 1.4、控制台 2、消息发送方式 2.1、发送同步消息 2.2、发送异步消息 2.3、单向发送 3、消息消费方式 3.1、负载均衡模式࿰…...
![](https://img-blog.csdnimg.cn/img_convert/87ed5d59344f4417fdd842a760465c93.png)
libmpv使用滤镜处理视频进行播放
一、前言 作为一个功能强大的多媒体框架,libmpv为开发者提供了广泛的功能和灵活的控制权。滤镜是libmpv的一个重要特性,允许开发者对视频进行各种实时处理和增强,从而满足用户对于个性化、创意化和高质量视频体验的需求。 滤镜是一种在视频渲染过程中应用特定效果的技术。…...
![](https://www.ngui.cc/images/no-images.jpg)
Harbor.cfg 配置文件参数详解
目录 Harbor.cfg 配置文件参数详解 所需参数: hostname: ui_url_protocol: max_job_workers: db_password: customize_crt: ssl_cert: ssl_cert_key: secretkey_path&#…...
![](https://img-blog.csdnimg.cn/36474a1e5d894671ac93c65f60449036.gif)
模仿火星科技 基于cesium+ 贴地测量+可编辑
当您进入Cesium的编辑贴地测量世界,下面是一个详细的操作过程,帮助您顺利使用这些功能: 1. 创建提示窗: 启动Cesium应用,地图场景将打开,欢迎您进入编辑模式。在屏幕的一角,一个友好的提示窗将…...
![](https://img-blog.csdnimg.cn/5dd6a95662dd404ab5eb8607b9c156a5.gif)
模仿火星科技 基于cesium+角度测量+高度测量+可编辑
1. 创建提示窗: 启动Cesium应用,地图场景将打开,欢迎您进入编辑模式。 在屏幕的一角,一个友好的提示窗将呈现,随着您的操作,它会为您提供有用的信息和指导。 2. 绘制面积: 轻轻点击鼠标左键&a…...
![](https://www.ngui.cc/images/no-images.jpg)
Codeforces の 动态规划
Codeforces Round 785 (Div. 2) - C. Palindrome Basis dp(9/100) 题目链接 思路:整数划分基础上加一个判断回文的条件 整数划分思路:背包容量为n,物品有体积为1~n n种,每种无数个,求使背包恰好装满的方案数——完全背…...
![](https://img-blog.csdnimg.cn/b94e5413bce242efab952c550cba7762.png)
数学建模-爬虫系统学习
尚硅谷Python爬虫教程小白零基础速通(含python基础爬虫案例) 内容包括:Python基础、Urllib、解析(xpath、jsonpath、beautiful)、requests、selenium、Scrapy框架 python基础 进阶(字符串 列表 元组 字典…...
![](https://img-blog.csdnimg.cn/6ccd3f86fa71418680b29e68bc928849.png)
HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制概述
ArkUI通过自定义组件的build()函数和builder装饰器中的声明式UI描述语句构建相应的UI。 在声明式描述语句中开发者除了使用系统组件外,还可以使用渲染控制语句来辅助UI的构建,这些渲染控制语句包括控制组件是否显示的条件渲染语句,基于数组数…...
![](https://img-blog.csdnimg.cn/69e9169c980f43e0aad31ff9ada88a9c.png)
【力扣刷题 | 第二十五天】
目录 前言: 474. 一和零 - 力扣(LeetCode) 总结: 前言: 今天我们依旧暴打动态规划 474. 一和零 - 力扣(LeetCode) 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集…...
![](https://img-blog.csdnimg.cn/19374b93b78743b5ba48bafc353f4d2b.png)
GO学习之 函数(Function)
GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 文章目录 GO系列前言一、什么是…...
![](https://www.ngui.cc/images/no-images.jpg)
Jstack线上问题排查
1.top查找出哪个进程消耗的cpu高。执行top命令,默认是进程视图,其中PID是进程号(记下进程号) 2.top中shifth 或“H”查找出哪个线程消耗的cpu高 (记下最高的几个线程号) jstack 进程号 >> pid-cpu.…...
![](https://img-blog.csdnimg.cn/ff76538b98314199a074e92bc8e96198.jpeg)
VIM 编辑器: Bram Moolenaar
VIM 用了很长时间, 个人的 VIM 配置文件差不多10年没有更新了。以前写程序的时候, 编辑都用这个。 linux kernel, boost规模的代码都不在话下。现在虽然代码写的少了,依然是我打开文件的首选。 现在用手机了,配个蓝牙键…...
![](https://www.ngui.cc/images/no-images.jpg)
鸿蒙应用开发指南:从零开始构建一款智能音乐播放器
介绍 随着鸿蒙操作系统的发布,开发者们迫不及待地想要探索鸿蒙应用的开发。本篇博客将以构建一款智能音乐播放器为例,带你一步步了解鸿蒙应用开发的技术要点和实践。我们将使用HarmonyOS的开发环境和MarkDown进行排版,方便你快速上手。 准备…...
![](https://img-blog.csdnimg.cn/img_convert/b7bc77095a99db22e627187dd57339a9.png)
如何实现对主机的立体监控?
主机监控是保证系统稳定性和性能的重要环节之一,那应该如何实现对主机的立体监控? 本期EasyOps产品使用最佳实践,我们将为您揭晓: 主机应该如何分组和管理? 主机监控应该关注哪些关键性指标? 背 景 通…...
![](/images/no-images.jpg)
制作影视视频的软件/广州seo网站
数据传入时判断如果为0替换成" " series->label–>formatter里可以配置(回调函数) formatter: function(params) {if (params.value > 0) {return params.value;} else {return ;} },...
![](https://img-blog.csdnimg.cn/b8fe38d807194bbfb62865c4095a1add.jpeg#pic_center)
做展柜平时在哪里网站推广/推广方式怎么写
定点型 MySQL中使用浮点数类型和定点数类型来表示小数。 浮点型在数据库中存放的是近似值,定点类型在数据库中存放的是精确值。 浮点数类型包括单精度浮点数(float型)和双精度浮点数(double型)。定点数类型就是decim…...
![](/images/no-images.jpg)
可上传多个视频的网站建设/怎么找专业的营销团队
1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的架构实现起来要费…...
![](/images/no-images.jpg)
建设企业网站找谁/打开百度网站
写在前面本文目的不是教你如何成为一个真正的Linuxer也没有能力教你成为一个真正的linuxer而是通过笔者的一些想法试图指引你真正踏上学习linux之路成为一个真正意义的在路上的linuxer这有什么区别?是的一个成熟的Linuxer能够游走于表面的命令提示符与内部代码细节实…...
![](/images/no-images.jpg)
昆明网站建设推荐力鼎科技/地推平台
try 语句测试代码块的错误。 catch 语句处理错误。 throw 语句创建自定义错误。 1. try/catch语句 catch语句用来捕获try代码块中的错误,并执行自定义的语句来处理它。 语法: try{//在这里运行代码} catch(err){//在这里处理错误} <!DOCTYPE html>…...
![](/images/no-images.jpg)
菜鸟教程网站怎么做/简述在线推广网站的方法
这套题还是比较基础的。 首先b题是队友a的,我只是刚读懂题,如果没读错的话,应该就是匹配字符串,如果有一个happiness就输出yes,且输出匹配的位置和下一个位置就行,如果没有happiness就随便输出两个位置就行…...