热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

zookeeper的详细介绍

zk的配置介绍我们打开上一章安装时介绍的conf目录下的zoo.cfg文件,我们可以看到有几项显而易见的配置项:tickTime、initLimit、s

zk的配置介绍

    我们打开上一章安装时介绍的conf目录下的zoo.cfg文件,我们可以看到有几项显而易见的配置项:tickTime、initLimit、syncLimit、dataDir、clientPort,其中initLimit和syncLimit和zk集群相关,等到了讲集群的地方再介绍。


  • tickTime:是zk用于计算时的最小时间单位,单位为毫秒,tickTime=2000,表示最小时间单位为两秒。什么叫最小时间单位,即其他和时间有关的配置项都是tickTime的倍数。
  • dataDir:zk的数据都是会落入硬盘进行持久化的,重启时数据不会丢失,而dataDir即为zk保存数据的目录。
  • clientPort:zk的服务端端口,客户端连接服务端时填写的端口号。

zk的节点类型

    上一章说到zk利用节点记录数据,而zk的节点是没有相对路径的,只有绝对路径,根路径为/,所以每次访问某一个节点,加入根路径下的zk1节点,你要/zk1,如果zk1节点下的zk11节点,你要/zk1/zk11,这样来访问。另外zk的节点可以从两个维度进行分类,一个是(临时/持久),一个是(有序/无序)。


  • 临时节点:临时节点表示当这个节点创造者(某一台客户端)与服务端的会话失效之后,这个临时节点就会从zk上去除。创建临时节点通过create命令后面加上-e来实现,eg:创建一个zk_linshi节点,里面村存放124这么一个数据

create -e /zk_linshi 124



  • 持久节点:持久节点顾名思义,创建之后这个节点会一直存在,直到手动删除为止。zk的create命令不加-e,默认创建的就是持久节点。
  • 有序节点:有序节点表示节点会存在顺序,通过create命令加-s来创建,eg:

命令:
create -s /zk 32432
返回:
Created /zk0000000001
命令:
create -s /zk_haha 45345
返回:
Created /zk_haha0000000002
命令:
create -s /zk/zk22 fsss
返回:
Created /zk/zk220000000000


    我们创建了zk和zk_haha两个节点,而实际创建出来的是zk0000000001和zk_haha0000000002这两个节点。可以看到他在我们原本节点名字上,后面补了一个十位的数字,并且两次创建所补的数字还是递增的,这就是有序节点的含义。他所补的数字最大直到4字节int的最大值(2147483647),如果超过这个值,将会溢出。而我们创建/zk/zk22 这个节点时,所创建出来的子节点又回到了0000000000,所以跨节点后这个顺序不再共用。而zk有序节点的根本原因是,zk的每一个节点下都有一个计数器,当要在这个节点下创建有序节点时,计数器进行累加。


  • 无序节点:无序节点其实就是我们普通创建的节点,创建时叫什么名字,产生的就是什么名字,zk的create命令不加-s默认创建的就是无序节点。

zk的watch监听机制


watch监听中的三个方法


  • getData:获取当前节点的数据变化
  • exists:获取当前节点是否存在的变化
  • getChildren:获取当前节点的子节点变化(不包括子节点的数据变化)

watch触发监听的四类事件


  • created event:节点的创建,会触发getData方法
  • deleted event:节点的删除,会触发getData,exists,getChildren,很好理解,节点删除了,节点的数据和子节点都没有了,自然而然三个都会触发
  • changed event:节点的变化,会触发getData,exists
  • child event:子节点变化,会触发getChildren

watch的两个特性


  • 一次性:watch一旦触发,就会被删除,如果需要持续监听,需要不断重新设置watch
  • 有序性:客户端先得到watch通知,之后才会看到变化,如果没有收到watch通知,客户端是看不到变化的

使用watch的注意点


  1. watch是一次性的,所以想要持续监听,必须不断重新设置新的watch
  2. 利用watch进行持续监听,不能可靠的得到节点发生的所有变化,原因是你上一次watch被删除到重新设置新watch这段时间,存在时间延迟,所以这段时间发生的变化,是无法监听到的
  3. watch虽然只会被触发一次,但是涉及到的监听都会被出发到,比如deleted时间会触发exists,getData,getChildren三个监听,那这个三都会被触发到一次。

zk的权限控制

    上一章最后降到了一个ACL这个概念,他是zk节点的权限控制,他能且只能控制当前设置的节点权限,不能对该节点的子节点进行控制,更不具备递归性(linux上权限如果不是可以设置的话是递归的,需要区分一下)。一个ACL权限,由三部分构成{scheme:expression,perms}组成,scheme表示权限控制策略,expression为一个表达式,表示被授权的对象的集合,perms表示被授予的是哪几种权限。


scheme策略类型

    ACL中有以下几种策略类型:


  • world:这种策略下,expression只有一个:anyone,表示任何人,也是zk的默认策略。
  • auth:不需要设置expression,通过addauth命令添加认证用户,经过认证的用户具有权限。
  • digest:zk服务端通过明文设置,客户端使用username:base64(md5(password))串进行访问。
  • ip:使用客户端主机ip作为访问策略。addr/bit ,其中addr表示地址段,bit表示段后面的位数。eg:(ip:19.22.0.0/16,READ)表示,以19.22开头的所有客户端都具有该节点的读取权限。

perms权限类型

    ACL中有以下集中权限类型:


  • CREATE:创建子节点权限,简称c
  • READ:读取节点数据和字节信息的权限,简称r
  • WRITE:修改节点数据的权限,简称w
  • DELETE:删除子节点的权限,简称d
  • ADMIN:设置节点权限访问列表的权限,简称a

zk的总体特性


  1. 顺序一致性,保证客户端的操作都是按顺序执行的。
  2. 原子性,要么成功要么失败,不会出现部分成功。
  3. 对于zk集群,不管客户端连接的集群中的哪一台,看到的内容都是一样的。
  4. 可靠性,数据不会被变更或丢失,除非被客户端自己修改了。
  5. 及时性,客户端读取的肯定是最新的,不会有什么缓存的说法。

推荐阅读
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了多因子选股模型在实际中的构建步骤,包括风险源分析、因子筛选和体系构建,并进行了模拟实证回测。在风险源分析中,从宏观、行业、公司和特殊因素四个角度分析了影响资产价格的因素。具体包括宏观经济运行和宏经济政策对证券市场的影响,以及行业类型、行业生命周期和行业政策对股票价格的影响。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 加密世界下一个主流叙事领域:L2、跨链桥、GameFi等
    本文介绍了加密世界下一个主流叙事的七个潜力领域,包括L2、跨链桥、GameFi等。L2作为以太坊的二层解决方案,在过去一年取得了巨大成功,跨链桥和互操作性是多链Web3中最重要的因素。去中心化的数据存储领域也具有巨大潜力,未来云存储市场有望达到1500亿美元。DAO和社交代币将成为购买和控制现实世界资产的重要方式,而GameFi作为数字资产在高收入游戏中的应用有望推动数字资产走向主流。衍生品市场也在不断发展壮大。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
author-avatar
幸福蜗牛yeshi牛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有