001-Zookeeper特性与节点类型

Zookeeper

基础理论

CAP

一致性 Consistency
可用性 Availability
分区容错性 Partition tolerance

强一致性, 一个节点修改,同步其他节点后再返回 CP
最终一致性, 避免节点间网络问题影响整个集群 AP

zookeeper属于CP架构

BASE理论

基本可用 : 再系统出现故障时允许部分可用
软状态 : 允许分布式系统出现中间状态
最终一致性 :经过一段时间状态达成一致

zookeeper写操作强制一致性,读操作顺序一致性
zookeeper中写,如果访问主节点,则同步大半节点后返回
如果访问从节点,则forward到主节点写
正因为只是大半同步,并且从节点允许读,所以有的时候并不能完全保证读到最新数据

zk数据带有版本号

基本结构

文件系统 + 变化监听

配置

dataDir:默认是tmp目录下的需要修改
其他配置使用默认即可
在这里插入图片描述

常用命令

启动

bin/zkServer.sh start config/zoo.cfg

服务状态

bin/zkServer.sh status

连接客户端

bin/zkCli.sh

连接远程客户端

bin/zkCli.sh -server ip:port

连接后数据操作命令

在这里插入图片描述
在这里插入图片描述

数据结构

树结构
每个节点最大只能存储1M的数据
在这里插入图片描述
简单来说就是一个Map<String,Node>
Node:
data //值
acl //版本信息
stat //详细信息 事物id
children //子节点的key

节点分类

持久的 :即使zk集群挂掉,node也不会丢失
临时的 :客户端连接断开或者指定timeout时间内没有给Zk集群发消息,node就会清理

-w命令可以监听节点的状态

如果需要有顺序结构:创建命令添加 -s 在创建节点的时候会自动加上编号
持久顺序节点
临时顺序节点

例子:创建/demo/test 实际会生成
/demo/test0000000001
/demo/test0000000002
/demo/test0000000003

节点详情

在执行get请求的时后带上 -s 可打印节点详情

cZxid :Znode创建的事务id。
ctime:节点创建时的时间戳。
mZxid :Znode被修改的事务id,即每次对znode的修改都会更新mZxid。对于zk来说,每次的变化都会产生一个唯一的事务id,zxid(ZooKeeper Transaction Id),通过zxid,可以确定更新操作的先后顺序。例如:如果zxid1小于zxid2,说明zxid1操作先于zxid2发生,zxid对于整个zk都是唯一的,即使操作的是不同的znode。
pZxid: 表示该节点的子节点列表最后一次修改的事务ID,添加子节点或删除子节点就会影响子节点列表,但是修改子节点的数据内容则不影响该ID(注意: 只有子节点列表变更了才会变更pzxid,子节点内容变更不会影响pzxid)
mtime:节点最新一次更新发生时的时间戳.
cversion :子节点的版本号。当znode的子节点有变化时,cversion 的值就会增加1。
dataVersion:数据版本号,每次对节点进行set操作,dataVersion的值都会增加1(即使设置的是相同的数据),可有效避免了数据更新时出现的先后顺序问题。
ephemeralOwner:如果该节点为临时节点, ephemeralOwner值表示与该节点绑定的session id。如果不是, ephemeralOwner值为0(持久节点)。在client和server通信之前,首先需要建立连接,该连接称为session。连接建立后,如果发生连接超时、授权失败,或者显式关闭连接,连接便处于closed状态, 此时session结束。
dataLength : 数据的长度
numChildren :子节点的数量(只统计直接子节点的数量)

节点特性

  1. 同级节点 key 唯一
  2. 创建节点必须带上全路径
  3. session关闭,临时节点清除
  4. 自动创建顺序节点
  5. watch机制,监听变化
  6. delete逐层删除,deleteall递归删除
  7. 节点内容少量,data内容不适合大量

监听机制-watcher

监听类型

//监听子节点增减变化
ls -w key
//监听节点数据变化
get -w key
stat -w key

可以监听key节点的数据是否发生变化
一个watch事件,只会触发一次
会触发事件 并返回变更的path:具体的key

zk会串行回调所有的监听

基于长连接的session 如果session有效期内重连还是可以接受事件

事件:

  • None: 连接建立事件
  • NodeCreated: 节点创建
  • NodeDeleted: 节点删除
  • NodeDataChanged:节点数据变化
  • NodeChildrenChanged:子节点列表变化
  • DataWatchRemoved:节点监听被移除
  • ChildWatchRemoved:子节点监听被移除

永久性Watch

3.6.0版本后新增
addWatch [-m mode] path
mode有2种:

  1. PERSUSTENT
    持久化订阅
    对当前节点和当前节点的子节点删除新增事件进行监听
  2. RERSISENT_RECURSIVE
    持久化递归订阅
    在上一个基础上怎么加了子节点修改事件的监听

版本更新

在更新节点信息的时候可以加上 -v 版本 来实现乐观锁修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值