简介

     本系列flink源码分析第二个系列,上一个《flink源码分析集群资源分析集群资源,本系列分析功能组件kubeclientrpc,心跳,高可用,slotpool,restmetrics,future

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

rpc组件

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

rpccore

rpccore定义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组件启动发起的

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

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

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

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

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

原文地址:https://blog.csdn.net/szlhj/article/details/134627770

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_20722.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注