1.源码编译
- flink-1.19
- jdk-1.8
- scala-2.12
- mvm-3.86
- 自定义日志:注意修改8081端口,可能被占用;windows日志的路径命名不能包含:,要改名
- 自定义jar
-Dlog.file=./log/flink-tm-1.local.log
-Dlog4j.configuration=./a_conf/log4j.properties
-Dlog4j.configurationFile=./a_conf/log4j.properties
-Dlogback.configurationFile=./a_conf/logback.xml
2.动态代理RPC
两个进程之间的调用
- 组件-rpc实现
- hadoop - nio
- spark- akka----> netty(spark2)
- flink- akka+netty ----> prkko+netty(1.18+akka通信协议不开源了)
案例1
- 接口 抽象方法 : ResourceManagerGateway
- 接口的实现类 实现方法 :ResourceManager
- Handler类 实现InvocationHandler 重写invoke() 增强方法 关联要调用的方法 :PekkoInvocationHandler
- 服务类 创建Proxy.newProxyInstance实例 :PekkoRpcService
3. Akka
Akka可以单击高并发,也可以构建分布式程序
- Actor通信组件
- Actor可收发消息
- Actor之间通信先获取对方的ActorRef对象
- tell不接收响应,ask要有返回值
4.Flink UML
补充案例1
-
RpcGateway接口:最底层的网关接口 定义了一些远程调用的方法;
-
ResourceManagerGateway接口:网关接口 flink网关接口都实现了这个接口 RM 、JM 、TE;
-
RpcEndpoint类:组件的端点 消息通信组件都需要通信都会继承这个抽象类 RM、JM、TE
- RpcServer: PekkoInvocationHandler 自身对象的代理服务 自身交互 有本地方法和远程方法调用 在构造器里Start()创建
- RpcService:PekkoRpcService 动态代理 远程交互 获取自身和远程代理对象(connect()拿到别人的代理) 在ClusterEntryPoint创建