• Zookeeper初步


    目录

    Zookeeper有什么作用?

    Zookeeper数据存储

    Zookeeper常用api

    Zookeeper的节点类型

    订阅与通知

    版本号


    Zookeeper有什么作用?

    Zookeeper数据存储

     Zookeeper通过树形节点Znode(文件系统)来存储数据,在Znode处可以选择存储数据,也可以选择只存储路径,路径下可以有子路径。

    Zookeeper常用api

    方法作用

    create /path data

    在指定位置创建节点,并设置数据
    delete /path删除节点
    exists /path判断节点是否存在
    setData /path data设置节点数据
    getData /path获取节点数据
    getChildren /path获取节点的子节点

    需要注意的是,getData和setData只能是全量更新和获取,而不能追加或者部分更新。

    Zookeeper的节点类型

    持久化节点和临时节点

    • 持久化节点是Znode一旦创建就会被持久化,这个节点必须显示使用delete删除,否则持续存在。
    • 临时节点是临时创建的节点,可以被显式删除,也会因为连接中断,或者down掉而自行删除。临时节点不允许有子节点。

    持久化节点和临时节点的使用选择:

    当你需要存储一些不随着节点的消息而始终存在的数据时,需要使用持久化节点。

    当节点的存在与服务节点或者master节点的活性绑定的时候,需要使用临时节点。

    有序节点和非有序节点

    有序节点指的是按照创建顺序为你生成一个自增的id,通过id维护节点的顺序,当然,持久化节点可以是有序的,临时节点也可以是有序的。

    有序节点和非有序节点的使用选择:

    当存在资源的协调使用,或者采用Zookeeper实现分布式锁等类似的场景时,可以使用有序节点,来协调处理的顺序。

     因此可以分为:有序持久化节点、无序持久化节点、有序临时节点、无序临时节点。

    订阅与通知

    假设我们需要关注这样一个场景:我们需要检测当前某个节点下有没有数据,有数据就需要处理。

     最常规的做法就是轮询,间隔一定的时间去查询一下有没有变动。但是如果更新时间无法预测,没有规律可言,那么造成资源的浪费。

    我们就会想,如果你有数据的时候告诉我一声,我是不是就不用每次都来问你了?

     这就是Zookeeper的订阅与通知功能。

    当c1有数据操作时,因为c2事先添加了watch(订阅),所以有了步骤2通知的存在。

    需要注意的是:

    1. watch是一次性的,发生了一次变动以后,就会失效,想要新的通知需要进行新的订阅

    2. 通知是在单次发生的情况下进行的,也就是说假如c1添加了两条数据,那么通知会在第一次添加结束和第二次添加开始之前进行通知。

    3. 可以查询Zookeeper的状态来避免接受通知的过程中又发生新的数据变动。

    watch的类型:

    数据变动
    子节点变动
    节点的创建和删除

    版本号

    Zookeeper会维护一个版本号,在每次数据变化时,都会升级一次版本号。在setData和delete操作的时候,为了解决并发问题,客户端需要指定版本号,当你的版本号与当前的版本号不一致时,说明你的版本号是旧的,操作会失败。只有版本号匹配时,操作才能成功。

  • 相关阅读:
    零数科技荣登“2019中国区块链企业百强榜”位列前茅
    leetcode Top100(16)缺失的第一个正数
    Meta 发布 Bean Machine 帮助衡量 AI 模型的不确定性
    VsCode中一些可以让工作“事半功倍”的插件
    Linux入门教程:P12->压缩解压类
    35岁那年,我做了一个面临失业的决定
    大数据必学Java基础(八十二):基于UDP的网络编程
    iis建立站点外网无法访问(防火墙的入站规则和出站)
    SpringCloud-Eureka-介绍+非集群式搭建
    基于机器学习与大数据的糖尿病预测 计算机竞赛
  • 原文地址:https://blog.csdn.net/Day_and_Night_2017/article/details/127714075