秒懂Zookeeper

本文概述了Zookeeper作为节点数据管理软件的重要作用,包括实现数据一致性、服务注册与发现、分布式锁和Kafka底层,介绍了其安装、使用、内部结构及集群工作原理。重点讲解了选举机制和客户端写入流程。
摘要由CSDN通过智能技术生成

Zookeeper

概述

  • 是什么

    • 节点数据管理软件, 可以创建, 修改, 删除节点或者节点数据. 客户端连接zookeeper, 就可以实现对节点的一致性共享
  • 干什么

    • 实现数据一致性共享, 用于服务注册与发现(Dubbo就是用Zookeeper实现服务注册与发现), 实现分布式锁, 消息中间件入Kafka的底层实现
  • 怎么用

    1. 安装zookeeper软件 , 启动zookeeper服务, 或者zookeeper服务集群搭建与开启
    2. 对各个需要使用zookeeper功能的微服务添加依赖(一般使用zookeeperClient), 配置文件添加zookeeper 单个服务(或者集群)的ip和端口.
    3. 使用ZkClient对节点的创建, 修改, 删除, 监听. 完成特定功能

内部结构

  • 每一个节点可以抽象的理解为一个目录,
    • image-20201101101850070
    • 节点的类型
      • 临时节点
      • 持久节点
      • 序列化节点
        • 序列化临时节点
        • 序列化持久节点
    • 注意细节
      • 节点可以只有一个节点名称(相等于空目录), 也可以有节点内容.
      • 节点里面可以继续包含节点(临时节点只能是叶子节点)
      • 可以对节点做一些监听, 来实现各种功能, 比如对节点的监听(监听创建, 修改(节点本身修改/节点的子节点的创建或修改)), 节点数据的监听(节点数据的修改), 节点属性的监听(很少用)

常见操作

  • 创建节点
  • 删除节点
  • 设置节点内容
  • 监听节点

集群

  • 说是集群, 其实我个人觉得说是主从复制比较贴切
  • 原理
    • 启动多个zookeeper服务, 让他们相互关联(配置文件中每一个zookeeper服务都配有集群中每个其他zookeeper服务的ip和端口)
    • 把一些zookeeper服务设置成Leader, 一些设置成follower, 一些设置成observe(可有可无)
      • leader: 主节点相当于mysql中的master, 用于写操作
      • follower: 从节点相当于mysql中的slave, 用于读操作
      • observer: 旁观者节点(与follower节点不同, 他不用于选举, 所以叫他旁观者). 用于读操作
    • 通信机制: 现在就有了leader(一个)节点, 和若干个follower和observer节点, 他们直接的通信如图
      • image-20201101104053639
      • 如果客户端连接的是集群中的从节点
        • image-20201101104821617
      • 客户端写入流程说明:
        1. client向zk中的server发送写请求,如果该server不是leader,则会将该写请求转发给leader server,leader将请求事务以proposal形式分发给follower;
        2. 当follower收到收到leader的proposal时,根据接收的先后顺序处理proposal;
        3. 当Leader收到follower针对某个proposal过半的ack后,则发起事务提交,重新发起一个commit的proposal
        4. Follower收到commit的proposal后,记录事务提交,并把数据更新到内存数据库;
        5. 当写成功后,反馈给client。
    • 选举机制:
      • 触发条件
        1. 服务节点初始化启动
        2. 半数一上的从节点无法感知主节点
      • 选举说明
        1. 第一轮投票全部投给自己
        2. 第二轮投票给myid比自己大的相邻节点
        3. 如果得票超过半数,选举结束。
        4. image-20201101223104687
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinBin_Bang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值