主要指三个进程中的通讯
- CliFrontend
- YarnJobClusterEntrypoint
- TaskExecutorRunner
Flink内部节点之间的通讯使用Akka,比如JobManager和TaskManager之间。而operator之间的数据传输是利用Netty。
RPC是统称,Akka,Netty是实现
Akka与Actor模型
Actor(演员)模型,每个actor有一个mailbox来收发消息,每个actor都是一个单一的线程。
Actor系统(ActorSystem):相当于部门,系统里有线程池,多个actor系统可以在一台机器上共存。
Flink中的Actor
Flink系统由3个分布式组件组成:JobClient、JobManager和TaskManager。
异步消息、异步响应:Futures :Java JUC
与Actor通讯
Akka两种核心异步通讯方式:tell和ask。
-
tell跟你说一下就完了
-
ask可以获取到响应结果
RPC
RpcGateway
JobManger连接TaskManager里的Server,返回给JobManager一个Gateway
RpcEndpoint
RpcService与RpcServer
RpcService接口:实现:AkkaRpcService
RpcServer,由RpcService启动得到,RpcServer是self gateway(自身的网关:调用自己的方法,接收网关的请求),区别与访问其他节点的gateway
RpcServer接口两个实现
- AkkaInvocationHandler
- FencedAkkaInvocationHandler:高可用,Fenced栅栏
RpcEndpoint的start方法调用的是RpcServer的start