首页 > 其他分享 >ZooKeeper应用案例

ZooKeeper应用案例

时间:2023-03-14 22:31:54浏览次数:57  
标签:ZooKeeper id 案例 Master 应用 znode Consumer leader

使用ZooKeeper解决常见的分布式问题,包括leader选举、分布式队列、负载均衡等。

1、leader选举

基于ZooKeeper实现leader选举的基本思想是,让各个参与竞选的实例同时在ZooKeepeer上创建指定的znode,比如/current/leader,谁创建成功则谁竞选成功,并将自己的信息(host、port等)写入该znode数据域,之后其他竞选者向该znode注册watcher,以便当前leader出现故障时,第一时间再次参与竞选,具体如下图所示。

ZooKeeper应用案例_Zookeeper

基于ZooKeeper的leader选举流程如下:

1)各实例启动后,尝试在ZooKeeper上创建ephemeral类型znode节点/current/leader,假设实例B创建成功,则将自己的信息写入该znode,并将自己的角色标注为leader,开始执行leader相关的初始化工作。

2)除B之外的实例得知创建znode失败,则向/current/ leader注册watcher,并将自己角色标注为follower,开始执行follower相关的初始化工作。

3)系统正常运行,直到实例B因故障退出,此时znode节点/current/leader被ZooKeeper删除,其他follower收到节点被删除的事情,重新转入步骤1,开始新一轮的leader选举。

在Hadoop生态系统中,HBase、YARN和HDFS等系统,采用了类似的机制解决leader选举问题。

2、分布式队列

在分布式计算系统中,常见的做法是,用户将作业提交给系统的Master,并由Master将之分解成子任务后,调度给各个Worker执行。该方法存在一个问题:Master维护了所有作业和Worker信息,一旦Master出现故障,则整个集群不可用。为了避免Master维护过多状态,一种改进方式是将所有信息保存到ZooKeeper上,进而让Master变得无状态,这使得leader选举过程更加容易,典型架构如下图所示。

ZooKeeper应用案例_Zookeeper_02

该方案的关键是借助ZooKeeper实现一个分布式队列,并借助ZooKeeper自带的特性,维护作业提交顺序、作业优先级、各节点(Worker)负载情况等。借助ZooKeeper的PersistentSequentialZnode自动编号特性,可轻易实现一个简易的FIFO(First In First Out)队列,在这个队列中,编号小的作业总是先于编号大的作业提交。

Hadoop生态系统中Storm便借助ZooKeeper实现了分布式队列,以可靠地保存拓扑信息和任务调度信息。

3、负载均衡

分布式系统很容易通过ZooKeeper实现负载均衡,典型的应用场景是分布式消息队列,下图描述了Kafka是如何通过ZooKeeper解决负载均衡和服务发现问题的。在Kafka中,各个Broker和Consumer均会向ZooKeeper注册,保存自己的相关信息,组件之间可动态获取对方的信息。

ZooKeeper应用案例_Zookeeper_03

Broker和Consumer主要在ZooKeeper中写入以下信息:

  • Broker节点注册信息:记录在ephemeral类型的znode路径/brokers/ids/[0...N]([0… N]是指0到N之间的某个数)下,保存了该Broker所在host以及对外开放的端口号。
  • Consumer注册信息:记录在ephemeral类型znode路径/consumers/[group_id]/ids/[consumer_id]下,保存了Consumer group中各个consumer当前正在读取的各个topic及对应的数据流。
  • Consumer Offset追踪信息:记录在persistent类型的znode路径/consumers/[group_id]/offsets/[topic]/[broker_id-partition_id] 下,保存了特定Consumer group(ID为[group_id]))当前读到的特定主题([topic])中特定分片([broker_id-partition_id])的偏移量值。

标签:ZooKeeper,id,案例,Master,应用,znode,Consumer,leader
From: https://blog.51cto.com/key3feng/6121166

相关文章

  • AI绘画:数字时代的提示工程新兴应用
    在数字时代,人们对于信息和素材的需求日益增长。随着技术的不断发展,AI绘画正逐渐成为一种应对这种需求的新兴技术。特别是在“提示工程”这一领域中,AI绘画可以发挥出更大的......
  • 移动端应用----手机验证码登录
    一、短信发送目前市面上有很多第三方提供的短信服务,这些第三方短信服务会和各个运营商(移动、联通、电信)对接,我们只需要注册成为会员并且按照提供的开发文档进行调用就......
  • Zookeeper实现分布式锁(Curator API)
    CuratorAPI提供了基于Zookeeper的分布式锁的实现通过查看InterProcessMutex和LockInternals源码,确定分布式锁的锁定和释放流程互斥锁设计的核心思想:同一时间,仅一个进......
  • Spring Study lesson02 - 案例学习二-23-03-14
    把dao中UserDao的实现类写入到beans.xml中,三个实现类。<beanid="MySqlDaoImpl"class="com.feijian.dao.MySqlDaoImpl"/><beanid="OracleDaoImpl"class="com.feiji......
  • 反射和注解及二者综合案例
    一、反射1、反射概述在java.lang.reflect包是这么描述的:提供类和接口,以获得关于类和对象的反射信息。在安全限制内,反射允许编程访问关于加载类的字段、方法和构造方法......
  • 顺序串的实现及应用
    本文记录顺序串的数据结构定义及基本操作的算法描述,并对算法进行简单应用。采用C语言实现。源程序//SString.c#include<stdio.h>#include<string.h>/*状态......
  • 基于Spring Boot的应用环境感知自识别配置(转)
    1.SpringBoot应用集成etcd配置源在分布式、云化的系统里,应用的配置(尤其是依赖服务的配置、环境相关的配置)都存储到应用到本地配置文件里会给维护带来很大的麻烦,而且dock......
  • <<高并发系统实战课>> 小记随笔 —— 用户中心案例优化
    案例介绍用户中心的主要功能是维护用户信息、用户权限和登录状态,它保存的数据大部分都属于读多写少的数据。常见的优化方式主要是将用户中心和业务彻底拆开,不再与业务耦......
  • SIP协议在VoIP中的应用
    一、什么是SIP协议SIP协议又名会话发起协议,它是一个基于文本的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。SIP协议是应VoIP语音电话的产生而产生的,S......
  • 国产操作系统应用开发的趋势与挑战
    本文将从国产操作系统应用的现状分析、用户使用体验度、未来可能需要改进的地方、国产操作系统主要应用的场景等几个方面,探讨国产操作系统应用开发的趋势。 随着国内......