`
QING____
  • 浏览: 2232336 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Zookeeper简介(二)

 
阅读更多

二.ZK设计原理简述
1. Zk数据模型和层级namespace
    ZK的名称空间非常类似文件系统,名称为一系列的path,例如”/root/app/task”,ZK中每个node都是通过path来标识的。和文件系统不同的是,每个node可以有关联的data,字节点也是如此,这一点可以类比为文件系统允许path为file或者目录。ZK的设计是为了存储“协调”数据:状态信息,配置,位置信息等;所以每个节点的data都非常的小,b-kb范围。
    Znode维护着一个“状态结构”(stat structure),其中包括data/ACL变更的version和时间戳,用来校验协调数据的变更,每次znode数据变更,将会导致version号增加,每次获取数据时,version信息也会一同获取。
    znode中的data读写是原子性的,read获取znode中关联的所有数据,write采用replace的方式“写入”数据,每个node都有ACL(access control list)来限制操作。
    zk还有一种node为“临时节点“(ephemeral node),这种节点的生命周期和相应的session一致,session失效后,节点会被删除;临时节点,在很多设计中具有重要的意义。
2. Watches
    Zk提供了一种”watch“的机制,client可以在znode上设置(注册)watch。watch将会在znode节点变更时触发,当watch触发,client将会收到znode变更的数据消息。并且当client与server的链接失效后,client也会受到一个本地的通知。Watch机制为zookeeper客户端提供了一种”异步”以及callback方式数据获取,客户端可以针对自己感兴趣(手动注册的watch)或者系统事件作出相应操作.
1) 节点变更事件类型(Watcher.Event.EventType):

  • None:空事件类型,表示当前事件不是节点变更事件(极有可能是KeeperState事件)
  • NodeCreated :当注册的watcher所关注的节点被创建时
  • NodeDeleted :当注册的watcher所关注的节点被删除时
  • NodeDataChanged :当注册的watcher所关注的节点数据被update时
  • NodeChildrenChanged:当注册的watcher所关注的节点的子节点列表有变更时.

2) Server状态事件 (Watcher.Event.KeeperState):此类型事件为了告知client端,此时server端状态发生了何种变更

  •  Disconnected:当client端失去链接时,将会发出一个本地消息(此event非server端返回),接下来也极有可能会抛出异常(例如: ConnectionLossException, SessionExpiredException, SessionMovedException等..)
  • SyncConnected:client已经成功和ZK server建立连接,通常和Follower或者Leader建立连接.
  • AuthFailed:授权验证失败,比如建立连接时,链接重建或者session校验时.
  • ConnectedReadOnly:client和一个read-only server建立了链接.可能因为环境问题,导致当前client无法找到ZK 环境中的”Followers”或者客户端被允许连接到Observer类型的server上.
  • Expired:当前session已经过期,其数据已经被cluster移除;这种信息是非常致命的,可能是因为client端长时间离群,或者ZK 集群已经失效太久;一旦出现这个事件,唯一的办法就是new Zookeeper(…)

    Zk非常快速而且简单,这是它的目标,不过zk也提供了构建复杂服务的基础,例如同步,它提供了一些保证:

  1. 顺序一致性:数据的更新将按照client发送请求的顺序执行。
  2. 原子性:数据更新必须有确切的结果,成功或者失败。
  3. 一致性视图:无论client链接哪个server,它将获得一致的服务的视图(view)。
  4. 可靠性:一旦更新被执行,它将被持久存储。
  5. 实时性:在一定时间内,系统保证client的视图是实时的。


3. 简单API
    ZK的一个目标就是提供简单的API接口,如下就是其支持的操作:(请参考:org.apache.zookeeper.Zookeeper)

  1. create:新增节点: public String create(String path,byte[] data,List<ACL> acl,CreateMode mode),同步创建;public void create(String path,byte[] data,List<ACL> acl,CreateMode mode,StringCallback cb,Object ctx),使用callback方式.
  2. delete:删除节点
  3. exites:检测节点是否存在 –--支持Watcher
  4. getData:获取node上关联的数据    ----支持Watcher
  5. setData:重置node上关联的数据
  6. sync:同步操作,等待数据的传播

4. 实现(implementation):



  

     这种可”复制“的database(解释:我们成为replicas database,每个ZK Server都持有一个本地的全数据镜像数据库副本)以data tree的方式保存在内存中,更新操作首先被持久在log中以便恢复;write在应用在内存之前首先被存储在disk中。每个ZK server都能服务clients,client向其链接的server提交请求,对于read请求将会直接从本地”复制“的内存数据库中获取;对于更改服务状态的write请求,将会采用agreement protocal(ZK中采用二步提交方式)。agreement protocal将会把client提交的write请求转发给单一的server,即leader。对于其他的folower,接受leader的消息提议,同意其消息传输。消息层会关注leader失效时的交替以及folower和leader的数据同步。
    Zk使用自定义的原子性消息传播机制(ZAB),因为消息层是原子性的,ZK能够确保本地备份不会”偏离“;当leader接受到write请求后,在应用write操作时它会”计算“系统的状态,并以事务的方式更新状态。
    Zk本身并不是数据库,也不是为数据存储而生,所以znode上挂载的数据尽量的小,默认配置为1M,一般我们建议此数据应该尽量的小,因为存储太大的数据将会造成server的操作耗时(数据库在集群中传输时间较长,网络环境复杂也会增加数据传输出错的机会),带来请求响应延迟增大;如果你的应用需要ZK维护一些较大的数据,建议数据存储采用其他的文件系统(或数据库),ZK的node上只存储文件的引用位置。

5. Sequence Nodes
    对于普通的节点创建,我们指定path,这适合一般场景;不过,在创建节点时,你可以要求ZK为你在path的结尾追加一个自增的计数。此计数器对于其父节点而言是唯一的。计数器的格式为%010d—10个数字前缀用0来填充:000000001,其最大值为Integer.MAX_VALUE.

6. Zk的时间跟踪

  1. zid:事务ID,每个数据变更操作的请求,ZK Leader都会为其生成一个全局唯一的zid,zid也标识这请求变更的顺序,如果zid1 < zid2,则认为zid1在zid2之前发生。
  2. version number:对node的任何更新都将会导致其version增加,每个节点都有3种version: version(znode节点数据变更),cversion(子节点变更),aversion(此节点ACL变更)。
  3. Ticks:当使用多个zk server时,server需要使用ticks来声明事件的耗时,比如状态装载,session过期,peer间的链接超时等。
  4. real time:ZK不使用绝对时间,对于数据的变更使用了时间戳。


7. ZK stat 结构

  • czxid:node创建时的zxid。
  • mzxid:znode的数据最后更新的zxid
  • ctime:此节点创建时来自epoch的time毫秒数
  • mtime:znode最后更新的毫秒数,来自epoch
  • version:znode数据更新的版本号
  • cversion:znode的字节点变更的版本号
  • aversion:znode的ACL变更的版本号
  • ephemeralOwner:临时节点的session id,如果不是临时节点,将为0
  • dataLength:znode中挂载的数据的长度
  • numChildren:znode中子节点的个数

    ZK 数据结构,请参考:

    1) org.apache.zookeeper.server.DataNode; 数据的最小表示单元,每个path最终将会以DataNode来表示

    2) org.apache.zookeeper.server.DataTree; DataNode的维护关系,根据path层级关系将DataNode逻辑上存储为Tree

    3) org.apache.zookeeper.server.ZKDatabase: ZK本地数据库,存储了DataTree,ACL,Sessions列表,Wathers列表等.

    4) org.apache.zookeeper.server.SessionTracker.Session:客户端和server的链接信息

    5) org.apache.zookeeper.server.persistence.FileTxnLog: ZK server所接收到的变更操作,以日志方式存储

 

  • 大小: 30.1 KB
分享到:
评论

相关推荐

    【大数据入门笔记系列】第二节 Zookeeper简介

    【大数据入门笔记系列】第二节 Zookeeper简介前言Zookeeper简介应用场景实质作用选举方式方式一(初次启动)方式二(宕机选举)脑裂问题跳转 前言 上一节介绍了,Zookeeper是一种分布式的、开放源码的分布式应用程序...

    java高级软件工程师教程快速入门Zookeeper+dubbo视频教程

    第二阶段深入Dubbo RPC、SPI等核心功能点,列举多个示例加以应用说明,期望能够帮助学者快速提升Dobbo和Zookeeper的技术能力。 2、适应人群 有一定的Java Web基础。 3、课程亮点 系统的学习Dubbo技术栈,掌握Dubbo...

    Hadoop+Hive+Spark+Kafka+Zookeeper+Flume+Sqoop+Azkaban+Scala

    基于 Zookeeper 搭建 Hadoop 高可用集群 二、Hive 简介及核心概念 Linux 环境下 Hive 的安装部署 CLI 和 Beeline 命令行的基本使用 常用 DDL 操作 分区表和分桶表 视图和索引 常用 DML 操作 数据查询详解 三、Spark ...

    dubbo+zk 分发全套教程 附两套实战项目(40G)

    〖课程介绍〗:dubbo+zk分布式全套教程带实战项目两套(40G)〖课程目录〗:实战项目两套---分布式实战项目教程(一套)---dubbossm架构项目(一套)...imooc.rarZookeeper入门(第二套)---(1)Zookeeper简介、集群环境搭建---

    Hadoop权威指南 第二版(中文版)

    ZooKeeper简介;开源工具Sqoop,最后还提供了丰富的案例分析。  本书是Hadoop权威参考,程序员可从中探索如何分析海量数据集,管理员可以从中了解如何安装与运行Hadoop集群。 目录 第1章 初识Hadoop  数据!数据...

    大数据学习笔记

    6.1 zookeeper简介 25 6.2 分布式应用程序 25 6.3 Apache Zookeeper意味着什么? 26 第7章 zookeeper基本组成与工作流程 27 第8章 zookeeper的leader节点选择 31 第9章 zookeeper安装 33 第10章 zookeeper 命令行...

    大数据平台简介.pptx

    Hadoop生态系统 Ambari (安装部署工具) Zookeeper (分布式协调服务) HBase (分布式协数据库) Oozie (作业流调度系统) HDFS (分布式存储系统) YARN (分布式计算框架) MapReduce (离线计算) Tez (DAG...

    华为HCIA-Big Data V2.0 LVC公开课培训.rar

    目录: 第一章 大数据行业与技术趋势 ...12.1_ZooKeeper简介-与组件的关系 第十三章 FusionInsight HD 解决方案介绍 13.1_FusionInsight概述-FusionInsight特性介绍 13.2_FusionInsight HD 成功案例

    非常好的大数据入门目资源,分享出来.zip

    二、Hive Hive 简介及核心概念 Linux 环境下 Hive 的安装部署 Hive CLI 和 Beeline 命令行的基本使用 Hive 常用 DDL 操作 Hive 分区表和分桶表 Hive 视图和索引 Hive 常用 DML 操作 Hive 数据查询详解 三、Spark ...

    Hadoop实战-第二版-陆嘉恒 (2012版)

    ZooKeeper详解16. Avro详解17. Chukwa详解18. Hadoop的常用插件与开发19. Hadoop在yahoo的应用附录A: 云计算在线监测平台附录B: Hadoop安装、运行、使用说明附录C:使用DistributedCache的MapReduce程序附录D:...

    商品秒杀系统(限时抢购系统),包含商城展示与后台管理(毕业设计)

    简介 项目主要针对秒杀系统进行实现,前后端分离项目,其中设计到技术主要为SpringBoot、Zookeeper、Redis、rabbitMQ。 添加一键部署,mybatis-plus逆向生成 其中融入短信通知(榛子云)、邮件通知(boot-starter-...

    基于spring boot的爬虫系统,优秀毕业设计,计算机必看!

    简介 通过 spring boot 搭建的爬虫系统 二. 技术选型 &gt; spring boot : 搭建项目框架,比较迅速,集成嵌入式tomcat,部署运行方便,零配置代码简洁 &gt; elasticSearch : 作为nosql数据存储引擎 &gt; elastic-job : ...

    大数据精选入门指南,包括大数据学习路线、大数据技术栈思维导图

    二、蜂巢 Hive简介及核心概念 Linux环境下Hive的安装配置 Hive CLI 和 Beeline 命令行的基本使用 Hive 使用 DDL 操作 Hive 分区表和分区表 Hive 视图和索引 Hive 使用 DML 操作 Hive数据详细查询解 三、火花 火花...

    尚硅谷SpringCloud第2季2020版.mmap

    一篇很好的springCloud学习的思维导读,...SpringCloud Alibaba入门简介 SpringCloud Alibaba Nacos 服务注册和配置中心 SpringCloud Alibaba Sentinel 实现熔断与限流 SpringCloud Alibaba Seata 处理分布式事务

    分布式RPC系统框架实战教程.zip

    1.04Dubbo简介 1.05Dubbo的四大组件 1.06Dubbo与依赖版本 1.07直连式Dubbo系统框架搭建 1.08zookeeper注册中心 1.09Dubbo应用到web工程 1.10Dubbo管控平台 1.11关闭服务检查 1.12多版本控制与服务分组 1.13 多协议...

    MyRPC:一个易用、实用、高可用的分布式RPC框架,基于netty,Protostuff,Zookeeper,Quartz等框架

    二、简介 MyRPC是一个可用于生产环境的轻量级,高可用,高性能,高易用分布式远程调用框架,参考dubbo的设计,是一个五脏俱全的简易版dubbo,支持同步调用,异步调用,服务自动注册,定时调度系统等。 1.架构 2.特性...

    Hadoop权威指南(中文版)2015上传.rar

    第11章 Pig简介 安装与运行Pig 执行类型 运行Pig程序 Grunt Pig Latin编辑器 示例 生成示例 与数据库比较 PigLatin 结构 语句 表达式 1.4.4 类型 模式 函数 用户自定义函数 过滤UDF 计算UDF 加载UDF 数据处理操作 ...

    基于Docker构建的Hadoop开发测试环境,包含Hadoop,Hive,HBase,Spark+源代码+文档说明

    2. 使用方法简介 3. 已知问题 4. 注意事项 ## 1.基本软件环境介绍 ###1. 软件版本 - 操作系统: CentOS 6 - Java环境: OpenJDK 8 - Hadoop: 2.7.2 - Spark: 1.6.2/2.1.0 - Hive: 1.1.1/2.1.1 - HBase: 1.2.2 - ...

    Elastic-Job分布式任务调度视频教程

    有了任务调度即可解放更多的人力由系统自动去执行任务,Elastic-job是当当网基于quartz 二次开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,实现任务高可用以及分片。2、课程价值本着从...

Global site tag (gtag.js) - Google Analytics