Leader Election
Leader Election
Zookeeper的基本操作
Zookeeper虽然是分布式系统,但它并不是为文件存储而设计的,Zookeeper里存储的一般是配置信息和源信息。实际上,Zookeeper在每个节点上存储大小都在1M一下(通常是远小于1M)
基于Zookeeper的Leader Election
抢注Leader节点——非公平模式
1.创建Leader父节点,如/chroot,并将其设置为persist节点
2.各客户端通过在/chroot下创建Leader节点,如/chroot/leader,来竞争Leader。该节点应被设置为ephemeral
3.若某创建Leader节点成功,则该客户端成功竞选为Leader
4.若创建Leader节点失败,则竞选Leader失败,在/chroot/leader节点上注册exist的watch,一旦该节点被删除则获得通知
5.Leader可通过删除Leader节点来放弃Leader
6.如果Leader宕机,由于Leader节点被设置为ephemeral,leader节点会自行删除除。而其它节点由于在Leader节点上注册了watch,故可得到通知,参与下一轮竞选,从而保证总有客户端以Leader角色工作
先到先得,后则监视前者——公平模式
1.创建Leader父节点,如/chroot。并将其设置为persist节点
2.各客户端通过在/chroot下创建Leader节点,如/chroot/leader,来竞争Leader。该节点应被设置为ephemeral_sequential
3.客户端通过getChildren方法获取/chroot/下所有子节点,如果其注册的节点的id在所有子节点中最小,则当前客户端竞选Leader成功
4.否则,在前面一个节点上注册watch,一旦前者被删除,则它得到通知,返回step3
5.Leader节点可通过自行删除自己创建的节点以放弃Leader
Leader Election在Curator中实现(Curator提供2种实现)
Kafka基于Controller的Leader Election
基于Controller的Leader Election
》整个集群中选举出一个Broker作为Controller
》Controller为所有的Topic的所有Partition指定Leader及Follower
优点
》极大缓解Herd Effect问题
》减轻Zookeeper负载
》Controller与Leader及Follower间通过RPC通信,高效且实时
缺点
》引入Controller增加了复杂度
》需要考虑Controller的Failover
注:Kafka 0.8.2之前的版本Kafka的Leader Election是由每个Patition的多个Replica同时竞争Leader。
接下来我们讲讲Kafka Controller,下面是Kafka的一部分源码,主要是讲Controller
//每个server启动起来之前都要先启动kafkaController
我们进去看看
//这部分功能是监控eclectionPath,也就是Controller的Path,观察是否有数据变化
//如果有数据变化,就进入elect函数,立马做一次选举
我们看怎么选举的
//不管当前有没有Controller,先获取leader信息,再去判断Controller是否是leader
Controller Failover
Controller挂了,如果Controller是leader,那么新的Controller会告诉所有的和leader有关的follower新的leader,通过RPC的方式。
Leader Election的更多相关文章
- ZooKeeper leader election
Paxos是分布式应用中解决同步问题的核心.作为应用研发工程师,我们总是倾向于使用一种相对简洁的方式实现复杂的算法.ZooKeeper leader election实现就是一个非常好的参考. 其实现 ...
- Kafka配置项unclean.leader.election.enable造成consumer出现offset重置现象
消费端出现offset重置为latest, earliest现象,类似log: (org.apache.kafka.clients.consumer.internals.Fetcher.handleF ...
- Leader Election 选举算法
今天讲一讲分布式系统中必不可少的选举算法. leader 就是一堆服务器中的协调者,某一个时刻只能有一个leader且所有服务器都承认这个leader. leader election就是在一组进程中 ...
- Kafka学习笔记(4)----Kafka的Leader Election
1. Zookeeper的基本操作 zookeeper中的节点可以持久化/有序的两个维度分为四种类型: PERSIST:持久化无序(保存在磁盘中) PERSIST_SEQUENTIAL:持久化有序递增 ...
- Zookeeper 学习笔记之 Leader Election
ZooKeeper四种节点类型: Persist Persist_Sequential Ephemeral Ephemeral_Sequential 在节点上可注册的Watch,客户端先得到通知再得到 ...
- [译]ZOOKEEPER RECIPES-Leader Election
选主 使用ZooKeeper选主的一个简单方法是,在创建znode时使用Sequence和Ephemeral标志.主要思想是,使用一个znode,比如"/election",每个客 ...
- zookeeper源码分析之五服务端(集群leader)处理请求流程
leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...
- 【Zookeeper】源码分析之Leader选举(二)
一.前言 前面学习了Leader选举的总体框架,接着来学习Zookeeper中默认的选举策略,FastLeaderElection. 二.FastLeaderElection源码分析 2.1 类的继承 ...
- zookeeper curator选主(Leader)
在分布式系统设计中,选主是一个常见的场景.选主是一个这样的过程,通过选主,主节点被选择出来控制其他节点或者是分配任务. 选主算法要满足的几个特征: 1)各个节点均衡的获得成为主节点的权利,一旦主节点被 ...
随机推荐
- MySql Connector/c++8中JSON处理Demo
#include <iostream> #include <vector> #include <mysqlx/xdevapi.h> using std::cout; ...
- <寒假逆向学习第一天> 破解基础知识之介绍常见工具和壳的特征
对于我们新手来说,程序是什么语言编写的?程序到底有没有加壳?程序加了什么壳?一直在我们心中充满了疑惑,本文我将根据我的近期学习,总结一下常见的工具和壳的特征. 一:程序是什么语言编译的 从目前接触到程 ...
- Mysql升级过程的问题
升级安装5.6版本mysql linux环境下的yum默认mysql版本是5.1的,由于项目需要保存表情等4个字节的数据,版本受限,需要升级到5.6版本支持utf8mb4格式的编码. 升级过程大概就是 ...
- 如何理解NaN?
NaN这个特殊的Number与所有其他值都不相等,包括它自己: NaN===NaN: //false 唯一能判断NaN的方法是通过isNaN()函数: isNaN(NaN); //tr ...
- Java实现文件的上传下载
文件上传,下载的方法: 上传代码 /** * 文件上传.保存 * * @param mapping * @param form * @param request * @param response * ...
- Linux : centOS 与 Ubuntu 安装 Nginx
源码下载: wget http://nginx.org/download/nginx-1.14.0.tar.gz 解压:tar –zxvf xxx 安装依赖: yum -y install open ...
- 第五课:PHP echo和print 语句
PHP echo 和 print 语句 PHP 是通过 print 和 echo 语句来动态输出 HTML 内容,虽然 print 和 echo 语句两者的功能几乎是完全一样,但是还是有一点差别的. ...
- ZooKeeper(2)-安装和配置
一.下载 https://zookeeper.apache.org/ 二.本地模式安装 1.安装前准备 (1)安装Jdk (2)拷贝Zookeeper安装包到Linux系统下 (3)解压到指定目录 . ...
- stm32f103 time2配置,转载
//----------------------------main()-------------------- //stm32f103c8t6有3个普通1个高级定时器 //每次进入中断服务程序间隔时 ...
- Druid单机环境安装指南
1.下载单机环境必备工具 下载druid-0.10.1-bin.tar.gz和tranquility-distribution-0.8.2.tgz插件 http://druid.io/download ...