Flink源码

1.源码编译

  • flink-1.19
  • jdk-1.8
  • scala-2.12
  • mvm-3.86
  • 自定义日志:注意修改8081端口,可能被占用;windows日志的路径命名不能包含:,要改名
  • 自定义jar

2. Pekko

Akka、Pekko 用于构建高并发、分布式、可容错、事件驱动的开发库,基于Actor模型,用于处理通信中的消息。

- Actor通信组件
- Actor可收发消息
- Actor之间通信先获取对方的ActorRef对象
- tell不接收响应,ask要有返回值

3.动态代理RPC

两个进程之间的调用

RPC案例1

- 接口 抽象方法 : ResourceManagerGateway 
- 接口的实现类 实现方法 :ResourceManager  
- Handler类 实现InvocationHandler 重写invoke() 增强方法 关联要调用的方法  :PekkoInvocationHandler 
- 服务类 创建Proxy.newProxyInstance实例  :PekkoRpcService

UML

RPC案例2

- ResourceManagerGateway接口  extends FencedRpcGateway extends  RpcGateway(最底层的网关接口)
  - registerJobMaster()
  - registerTaskExecutor()
  
- RpcEndpoint类 :消息通信组件端点
  - RpcServer : 自身的代理服务
    - 在子类ResourceManager构造方法中创建  startServer()
    - 通过PekkoInvocationHandler动态代理类
      -  invoke(): 判断是本地调用反射invoke(this)还是远程调用invokeRpc() 
  - RpcService :远程的代理服务  PekkoRpcService
    - 在ClusterEntrypoint开始启动集群初始化时创建  RpcUtils.createRemoteRpcService()
    - connect() 先与远端RpcEndpoint进行一次握手确认节点状态正常 再获取远程代理对象
    - startServer() 负责启动PRCServer
  - onStart() : RpcEndpoint启动
  - endpointId :节点的唯一标识

案例设计

假设设计一个TaskExecutor进程 向ResourceManager进程注册,如何设?
1.首先TaskExecutor和ResourceManager要是可以通信的(继承RpcEndpoint);
2.TaskExecutor要能获取ResourceManager的远程代理对象(TaskExecutorGateway、ResourceManagerGateway);
3.能找到ResourceManager中具体要调用的方法(ResourceManagerGateway.registerTaskExecutor);
4.要有能连接ResourceManager进程的通信服务(RpcService);
5.建立通信连接后要有能处理消息的公共类(PekkoRpcActor)。

4.高可用

4.1 leader选举

4.2 leader监听

LeaderContender:参选者
LeaderElectionService、LeaderElection:选举leader
LeaderRetrievalService、LeaderRetrievalListener:获取当前leader的地址,进行监听
ZooKeeperLeaderElectionDriver :Curator框架实现真正的选举

5.心跳机制

6.内存

https://zhuanlan.zhihu.com/p/340345588

posted @   小花生hadoop  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示