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,后而被 ...
随机推荐
- 《关于ES6的学习》
var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方声明的,都会提升到当前作用域的最顶部,这种行为叫做变量提升(Hoisting) 也就是说,如 ...
- 《Python核心编程》第二版第五章答案
本人python新手,答案自己做的,如果有问题,欢迎大家评论和讨论! 更新会在本随笔中直接更新. 5-1.整型.讲讲Python普通整型和长整型的区别. Python的标准整形类型是最通用的数字类型. ...
- 谈谈我的js学习过程(二)——“Hello World!”
在<谈谈我的js学习过程(一)>中,我简单聊了一下我认为的javascript的学习方法,接下来我们可以尝试来写一个最简单的js代码. "Hello World!"对于 ...
- 中国气象网 气象数据开放平台 API用法 (Android)
因为要做个天气应用.须要找个天气的API.上网上搜了下都是那几个,并且基本都过时了.百度有个天气API,只是貌似仅仅能提供当天的.网上提到的中国气象接口的文章,大都用的时旧API,有的被封了,有的永远 ...
- 【图像处理】Schmid滤波器
Schmid也是一种类Gabor图像滤波器,在这篇文章[1]中有详细推导和介绍. 一种更简洁的表达公式是: 当中,r为核半径,Z为归一化參数,τ和σ是比較重要的參数,在ReID提取TextFeatur ...
- CCF认证201712-2游戏
问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向. 游戏开始,从1号小朋 ...
- 详解 Python3 正则表达式(四)
上一篇:详解 Python3 正则表达式(三) 本文翻译自:https://docs.python.org/3.4/howto/regex.html 博主对此做了一些注明和修改 ^_^ 更多强大的功能 ...
- LaTeX源代码显示宏包listings应用备忘之新语言定义
我目前了解的LaTeX中有关源代码显示的宏包有两个,这里介绍其中的listings宏包.listings宏包中已经定义了部分计算机语言的显示样式,但还是有些语言没有定义,我们一起看一下如何定义新的 ...
- 【转】如何内网搭建NuGet服务器
原文:http://www.cnblogs.com/zhangweizhong/p/7755332.html NuGet 是.NET程序员熟知的工具,它可以直接安装开源社区中的各个公用组件,可以说是非 ...
- 20155339 第七周加分项目 mybash的实现
mybash的实现 要求 使用fork,exec,wait实现mybash 写出伪代码,产品代码和测试代码 发表知识理解,实现过程和问题解决的博客(包含代码托管链接) 学习相关知识 fork函数 查看 ...