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框架实现真正的选举
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具