flink源码分析之功能组件(三)-rpc组件

简介

本系列是flink源码分析的第二个系列,上一个《flink源码分析之集群与资源》分析集群与资源,本系列分析功能组件,kubeclient,rpc,心跳,高可用,slotpool,rest,metrics,future。

本文解释rpc组件,rpc组件用于个核心组件,包括作业管理器,资源管理器和任务管理器之间的通讯。

rpc组件

core包定义rpc基类/抽象类,flink rpc组件是使用akka框架实现,akka框架是基于actor模型的并发框架,本文不深入解释akka和rpc的akka实现的原理

rpc-core

rpc-core定义rpc组件的基类/抽象类

1)RpcEndpoint中提供了集群RPC组件的基本实现,所有需要实现RPC服务的组件都会继承RpcEndpoint抽象类。RpcEndpoint中包含了endpointId,用于唯一标记当前的RPC节点。RpcEndpoint借助RpcService启动内部RpcServer,之后通过RpcServer完成本地和远程线程执行。

2)FencedRpcEndpoint在RpcEndpoint的基础上增加了FencedToken。远程RPC调用时,会对比访问者携带的FencedToken和被访问者的FencedToken,flink实现FencedToken组件Id,主要作用防止被访问组件上下线,访问者访问到下线节点

3)RpcService负责创建和启动RpcServer,同时在RpcService中提供了连接远程RpcEndpoint的方法,创建了相应RpcGateway接口的动态代理类,用于后续执行远程RPC请求。

4)远程或本地的执行请求最终RpcServer实现完成

rpc连接

本节以任务管理器连接资源管理器为例,解释rpc使用原理,首先说明两个事情

1 高可用组件,本系列有专门的介绍flink高可用组件,这里只要了解,高可用组件有两个功能,选主和主节点变更通知

2 资源管理器接入高可用机制,任务管理器连接应该是资源管理器主节点,使用高可用组件获取资源管理器的最新主节点地址

上图是任务管理器连接资源管理器类图

  1. TaskExecutor启动高可用的主节点变更通知服务

启动由rpc组件启动发起的

  1. LeaderRetrievalService通知LeaderRetrievalListener监听器,主节点变更通知服务的启动或者主节点变更都会触发该事件通知,通知返回主节点的地址 leaderAddress

  2. 这里LeaderRetrievalListener实现是ResourceManagerLeaderListener,TaskExecutor的内部类,ResourceManagerLeaderListener调用TaskExecutor的notifyOfNewResourceManagerLeader

传入获取的最新主节点地址leaderAddress

  1. TaskExecutor构建和启动TaskExecutorToResourceManagerConnection,TaskExecutorToResourceManagerConnection调用RpcSerevice的connect方法构建RpcGateway,后续可使用RpcGateway调用资源管理器

总结,本文以任务管理器连接资源管理器为例,其他组件间连接类似,初始启动或目标组件主节点变更走的流程一样,依赖高可用组件获取最新的主节点地址,进而使用RpcService获取RpcGateway

相关推荐
RunningShare4 小时前
千万级用户电商平台,Flink实时推荐系统如何实现毫秒级延迟?
大数据·flink·推荐系统·ab测试
RunningShare12 小时前
基于Flink的AB测试系统实现:从理论到生产实践
大数据·flink·ab测试
武子康15 小时前
大数据-118 - Flink 批处理 DataSet API 全面解析:应用场景、代码示例与优化机制
大数据·后端·flink
云雾J视界18 小时前
Flink Checkpoint与反压问题排查手册:从日志分析到根因定位
大数据·阿里云·flink·linq·checkpoint·反压
眠りたいです1 天前
基于脚手架微服务的视频点播系统-脚手架开发部分-brpc中间件介绍与使用及二次封装
c++·微服务·中间件·rpc·架构·brpc
Hello.Reader1 天前
Flink 作业测试依赖、MiniCluster、DataStream 与 Table/SQL 上手
大数据·sql·flink
代码匠心1 天前
从零开始学Flink:实时流处理实战
java·大数据·后端·flink
青云交2 天前
Java 大视界 -- 基于 Java 的大数据实时流处理在工业物联网设备故障预测与智能运维中的应用
java·flink·kafka·工业物联网·设备故障预测·智能运维·实时流处理
Hello.Reader2 天前
用 Gradle 配置 Flink 从开发到打包的一条龙实践
大数据·flink
Hello.Reader2 天前
Flink 高级配置发行版剖析、Scala 版本、Table 依赖与 Hadoop 集成实战
hadoop·flink·scala