Flink架构分析之HA
抽象
LeaderElectionService
这个接口用于从一组竞选者中选出一个leader,其start
方法需要传递一个LeaderContender
竞选者作为参数,如果有多个竞选者,则每一个竞选者都需要拥有自己的竞选服务类。
LeaderContender
需要竞选leader的候选者们需要实现本接口,即flink中所有需要进行leader选举的组件均会实现本接口。
LeaderRetrievalService
这个接口用于当leader改变的时候收到通知,并回调注册的LeaderRetrievalListener
。某些组件对其他组件的leader变更敏感(比如ResourceManager的leader变更则TaskExecutor就需要重新连接到该新的RM上),这些组件就可以创建LeaderRetrievalService
服务,实现其敏感组件leader变更后的业务逻辑。
LeaderRetrievalListener
当leader改时获取到新的leader地址和id,进而实现自定义的业务功能。比如:TaskExecutor
的resourceManagerLeaderRetriever
就启动了一个ResourceManagerLeaderListener
当新的ResourceManager
被选举为leader时进行重新连接到新的leader。
实现
采用curator
库中的LeaderLatch
实现leader选举。主要涉及LeaderLatch
和LeaderLatchListener
这两个类.LeaderLatchListener
接口的两个回调方法:
isLeader
: LeaderLatch的失去leader时会被调用notLeader
: LeaderLatch的获得leader时会被调用
但是这两个方法都是在LeaderLatch
状态转变中被调用,都有可能在这两个方法调用前,leader又改变了回去了,这种情况下唯一可以保证的就是,你可以预期另一个对应的方法也会很快被调用。所以实现中LeaderLatchListener
的方法被回调时必须再次调用LeaderLatch.hasLeadership()
进行确认。
想了解更多的同学可以参考curator相关文档LeaderLatch
ZooKeeperLeaderElectionService
ZooKeeperLeaderElectionService
实现了LeaderLatchListener
接口当其启动的LeaderContender
被选举为leader时isLeader
方法会被回调,然后调用LeaderContender
的grantLeadership
,实现类可以在该方法中实现自己的业务逻辑(比如job的recovery)完成后再调用LeaderElectionService
的confirmLeaderSessionID
把新的leader的地址和uuid写入到相应的zk node节点,然后注册监听了该zk node节点的相关LeaderRetrievalService
就会收到leader变化的通知从而进行相应的业务处理。
下图为用zookeeper实现leader选举的时序图。
相关组件
- Dispatcher 负责任务的提交,任务持久化,创建JobManagerRunner执行任务以及当master失败时进行任务恢复
- ResourceManager 负责资源的分配和回收
- WebMonitorEndpoint 负责服务前端RESTful调用
- JobManagerRunner 负责job级别的leader选举
Flink架构分析之HA的更多相关文章
- Flink架构分析之Standalone模式启动流程
概述 FLIP6 对Flink架构进行了改进,引入了Dispatcher组件集成了所有任务共享的一些组件:SubmittedJobGraphStore,LibraryCacheManager等,为了保 ...
- Flink架构分析之资源分配
Task Slot Flink中每个真正执行任务的TaskManager都是一个JVM进程,其在多线程环境中执行一个或者多个子任务.为了控制一个JVM同时能运行的任务数量,flink引入了ta ...
- Flink架构分析之RPC详解
主要抽象 Flink RPC 框架主要抽象了RpcService,RpcEndpoint,RpcGateway,RpcServer这几个接口,具体实现可以采用多种方式,比如:akka,netty Rp ...
- flink架构介绍
前言 flink作为基于流的大数据计算引擎,可以说在大数据领域的红人,下面对flink-1.7的架构进行逻辑上的分析并和spark做了一些关键点的对比. 架构 如图1,flink架构分为3个部分,cl ...
- Flink架构,源码及debug
序 工作中用Flink做批量和流式处理有段时间了,感觉只看Flink文档是对Flink ProgramRuntime的细节描述不是很多, 程序员还是看代码最简单和有效.所以想写点东西,记录一下,如果能 ...
- tomcat架构分析 (Session管理)
Session管理是JavaEE容器比较重要的一部分,在app中也经常会用到.在开发app时,我们只是获取一个session,然后向session中存取数据,然后再销毁session.那么如何产生se ...
- 主流图数据库Neo4J、ArangoDB、OrientDB综合对比:架构分析
主流图数据库Neo4J.ArangoDB.OrientDB综合对比:架构分析 YOTOY 关注 0.4 2017.06.15 15:11* 字数 3733 阅读 16430评论 2喜欢 18 1: 本 ...
- Magento架构分析,Magento MVC 设计分析
Magento架构分析,Magento MVC 设计分析 分类:Magento 标签:Magento MVC.Magento架构 669人浏览 Magento 采用类似 JAVA的架构,其扩展与稳定性 ...
- Flickr 网站架构分析
Flickr 网站架构分析 Flickr.com 是网上最受欢迎的照片共享网站之一,还记得那位给Windows Vista拍摄壁纸的Hamad Darwish吗?他就是将照片上传到Flickr,后而被 ...
随机推荐
- BZOJ2425:[HAOI2010]计数(数位DP)
Description 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1 ...
- BZOJ2435:[NOI2011]道路修建 (差分)
Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1条双向道 ...
- 配置网卡绑卡 --RHEL7
配置网卡绑卡 1)网卡绑定(team方式) # 创建组接口nmcli connection add type team ifname team0 con-name team0 config '{&qu ...
- 8、Android---探究服务
8.1.服务是什么 服务(Service)是Android中实现程序后台运行的解决方案 非常适合执行那些不需要和用户交互而且要求长期的任务 服务的运行不依赖于任何用户界面 即使程序被切换到后台 或者用 ...
- JAVA构造MAP并初始化MAP
第一种方法:static块初始化 public class Demo{ private static final Map<String, String> myMap; static { m ...
- 手把手教你写基于C++ Winsock的图片下载的网络爬虫
手把手教你写基于C++ Winsock的图片下载的网络爬虫 先来说一下主要的技术点: 1. 输入起始网址,使用ssacnf函数解析出主机号和路径(仅处理http协议网址) 2. 使用socket套接字 ...
- ARM Linux驱动篇 学习温度传感器ds18b20的驱动编写过程
ARM Linux驱动篇 学习温度传感器ds18b20的驱动编写过程 原文地址:http://www.cnblogs.com/NickQ/p/9026545.html 一.开发板与ds18b20的入门 ...
- WP10的一点小问题
兼容WP8.0/WP7.5不太完整!也许是测试版的问题.毕竟还没发布正式版! 具体如:WP8.0或WP7.5的启动器!就是选择图片的启动器!调用后对话框返回的结果都是Cancel本来应该是OK的.也就 ...
- 2017-2018-1 20155214 《信息安全系统设计基础》 第9周课下测试-mypwd
2017-2018-1 20155214 <信息安全系统设计基础> 第9周课下测试-mypwd(深入版) 题目要求: 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; ...
- BootStrap 获得轮播中的索引和当前活动的焦点对象
$('#myCarousel').on('slide.bs.carousel', function (event) { var $hoder = $('#myCarousel').find('.ite ...