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的更多相关文章

  1. ZooKeeper leader election

    Paxos是分布式应用中解决同步问题的核心.作为应用研发工程师,我们总是倾向于使用一种相对简洁的方式实现复杂的算法.ZooKeeper leader election实现就是一个非常好的参考. 其实现 ...

  2. Kafka配置项unclean.leader.election.enable造成consumer出现offset重置现象

    消费端出现offset重置为latest, earliest现象,类似log: (org.apache.kafka.clients.consumer.internals.Fetcher.handleF ...

  3. Leader Election 选举算法

    今天讲一讲分布式系统中必不可少的选举算法. leader 就是一堆服务器中的协调者,某一个时刻只能有一个leader且所有服务器都承认这个leader. leader election就是在一组进程中 ...

  4. Kafka学习笔记(4)----Kafka的Leader Election

    1. Zookeeper的基本操作 zookeeper中的节点可以持久化/有序的两个维度分为四种类型: PERSIST:持久化无序(保存在磁盘中) PERSIST_SEQUENTIAL:持久化有序递增 ...

  5. Zookeeper 学习笔记之 Leader Election

    ZooKeeper四种节点类型: Persist Persist_Sequential Ephemeral Ephemeral_Sequential 在节点上可注册的Watch,客户端先得到通知再得到 ...

  6. [译]ZOOKEEPER RECIPES-Leader Election

    选主 使用ZooKeeper选主的一个简单方法是,在创建znode时使用Sequence和Ephemeral标志.主要思想是,使用一个znode,比如"/election",每个客 ...

  7. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  8. 【Zookeeper】源码分析之Leader选举(二)

    一.前言 前面学习了Leader选举的总体框架,接着来学习Zookeeper中默认的选举策略,FastLeaderElection. 二.FastLeaderElection源码分析 2.1 类的继承 ...

  9. zookeeper curator选主(Leader)

    在分布式系统设计中,选主是一个常见的场景.选主是一个这样的过程,通过选主,主节点被选择出来控制其他节点或者是分配任务. 选主算法要满足的几个特征: 1)各个节点均衡的获得成为主节点的权利,一旦主节点被 ...

随机推荐

  1. 小程序登录 -41003: aes 小程序加密数据解密失败问题

    在微信小程的开发中,登录问题,一定要按照这样的顺序 1. 小程序请求login,拿到code 然后传给服务端:  2.服务端拿到code 到微信服务器拿到sessionKey :3.然后小程序调用ge ...

  2. 爬虫——BeautifulSoup4解析器

    BeautifulSoup用来解析HTML比较简单,API非常人性化,支持CSS选择器.Python标准库中的HTML解析器,也支持lxml的XML解析器. 其相较与正则而言,使用更加简单. 示例: ...

  3. 02 shell编程之条件语句

    Shell编程之条件语句 学习目标: 掌握shell脚本条件测试 掌握if语句编程 目录结构: 条件测试 条件测试概述 l  对特定的条件进行判断,以决定如何执行操作 l  测试的方法 方法1:tes ...

  4. 修改二维码生成插件jquery.qrcode.js支持加入自定义LOGO

    1,将jquery.qrcode.min.js和jquery添加到您的网页中 <script src="jquery.min.js"></script> & ...

  5. 吐血分享:QQ群霸屏技术教程2017(维护篇)

    排名上去,并不是终极稳定,日常维护相当重要. 群排名做上去了,如果不去维护,排名很可能会下去,尤其是咱们做了很多群的时候,完全不会留意到. 为什么不稳定? 1.活跃度下去了,排名当然不稳定,这个需要日 ...

  6. Yaf学习(一)----Linux安装Yaf

    1.简介 Yaf,全称 Yet Another Framework,是一个高性能的PHP开发框架,采用PHP扩展实现(c语言).Blablablabla....... 2.环境 2.1 虚拟机 虚拟机 ...

  7. python线程与进程小结

    传统方式是调用2个方法执行1个任务,方法按顺序依次执行 # -*- coding:utf-8 -*- import threading import time def run(n): print('t ...

  8. 我的机器学习之路--anaconda环境搭载

    网上许多教程比较晦涩难懂,本教程按照笔者(新手)自己的视角记录,希望给大家一些帮助 1.安装anaconda 目前比较推荐的机器学习环境为anaconda. Anaconda指的是一个开源的Pytho ...

  9. vue笔记 介绍及安装 一

    Vue.js 是什么 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层, ...

  10. HyperLedger Fabric 1.4 关键技术(6.4)

    本节介绍从最底层的账本开始,逐一讲解账本的结构和存储.智能合约的编写和部署.通道的操作.节点的背书和提交.排序的共识和客户端SDK的接口调用,与交易流程顺序相反,由里及表的说明Fabric最关键的技术 ...