004.flink源码分析-jobmanager组件概览

flink运行模式可以划分为session模式和非session模式,session模式下,不需要在任务运行时像外部申请资源,资源的申请和释放都通过flink自己控制,如yarn-session模式,standalone模式,非session模式的资源控制交给外部系统,如application模式,per-job模式。实际上不同模式下最重要的区别是组件运行时机和资源控制权的问题,大部分代码逻辑相差不大。这里的session模式以standalone模式为例,非session模式以application模式为例。
无论哪种模式,flink的是一个主从架构,主节点叫做jobManager,从节点叫做TaskManager,在jobmanager的内部,有三大组件:ResourceManager,Dispatcher,RestEndpoint,在不同模式下,具体的实现类会有所差别。三个组件的具体实例都是通过工厂方法创建出来的
在standalone模式下:
第一个ResourceManager的实现类是StandaloneResourceManage,r是管理分配slot资源的组件。
第二个Dispatcher的实现类是DispatcherRunner,负责启动jobmaster并接收其他请求。
第三个RestEndpoint的实现类是DispatcherRestEndpoint,启动一个netty服务端,用来接收客户端发送提交job的数据。该web服务器使用了github上一个开源的基于netty的rest服务器,而没有使用jetty/tomcat这样的web容器。WebMonitorEndpoint启动好了之后内部netty等待接收客户端发送的数据。
standalone模式下:
004.flink源码分析-jobmanager组件概览_第1张图片
yarn模式下:
004.flink源码分析-jobmanager组件概览_第2张图片
下面从更高的层次分析这几个组件的抽象
(1)ResourceManager
其中,ResourceManager 的职责是负责资源管理,帮助 主节点 JobManager 完成从节点 TaskManager 的管理和资源的管理和分配等工作。类定义如下:

public abstract class ResourceManager<WorkerType extends ResourceIDRetrievable>
      extends FencedRpcEndpoint<ResourceManagerId>
      implements ResourceManagerGateway, LeaderContender 

004.flink源码分析-jobmanager组件概览_第3张图片
这里有三点比较重要:
1.继承了FencedRpcEndpoint,而FencedRpcEndpoint继承自RpcEndpoint。说明ResourceManager实现了RPC的功能可以接收RPC请求,根据前面的分析,该组件的启动会调用onStart方法。
2.集成了GateWay体系,说明他本身也是个RPC client。可以向RPC server发送rpc请求。
3.实现了LeaderContender,选举机制,说明该组件支持HA高可用,而高可用机制的默认实现是基于zk,这里的高可用还有另外一层用处,就是服务发现的功能,客户端连接resourcemanager是通过zk获取resourcemanager的地址然后去连接的,flink中其他涉及到ha的组件都是实现了该接口,并注册到zk,同时实现高可用和服务发现功能。
(2)Dispatcher
首先看类定义,Dispatcher是个抽象基类,负责作业提交的接收,持久化作业,启动一个jobmanager来运行作业,如果一个jobmanager挂了也是靠dispatcher来恢复,而且在session模式下,该组件持有session集群的一些状态。

public abstract class Dispatcher extends PermanentlyFencedRpcEndpoint<DispatcherId> implements DispatcherGateway {

004.flink源码分析-jobmanager组件概览_第4张图片
与上面的resourcemanager类似,该类也继承自RpcEndpoint体系和Gateway体系,因此具有RPC响应的功能。
(3)WebMonitorEndpoint
这是一个基础类,在standalone模式和session模式下实现类分别是DispatcherRestEndpoint和MiniDispatcherRestEndpoint,来看该类的定义:

public class WebMonitorEndpoint<T extends RestfulGateway> extends RestServerEndpoint implements LeaderContender, JsonArchivist

该组件也是个实现选举功能的组件,所以也可以做HA,该组件主要是接收Rest请求,相对比较简单。
本文作为jobmanager的一个概览,为下一篇分析jobmanager的启动流程提供基础。

你可能感兴趣的:(flink源码分析,flink,java,rpc)