当前位置: 首页 > article >正文

尚硅谷课程【笔记】——大数据之Zookeeper【一】

课程视频:【尚硅谷Zookeeper教程】

一、Zookeeper入门

概述

Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。

Zookeeper从设计模式角度理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责同志已经在Zookeeper上注册的哪些观察者做出相应的反应。

特点

1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。

2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。

3)全局数据一致。每个Server保存一份相同的数据副本。

4)更新请求顺序进行。来自同一个Client的更新请求按发送顺序依次执行。

5)数据更新原子性。一次更新要么成功,要么失败。

6)实时性。在一定时间范围内,Client能读到最新数据。

数据结构

Zookeeper的数据模型结构类似树结构,每个节点称作一个ZNode。每个ZNode默认能存储1MB的数据,每个ZNode都可以通过路径唯一标识

应用场景

统一命名服务:在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。

统一配置管理:分布式环境下,一般要求所有节点的配置信息是一致的,对配置文件修改后,希望能够快速同步到各个节点上。

统一集群管理:分布式环境下,实时掌握每个节点的状态是必要的,可根据节点实时状态走做出一些调整。

服务器节点动态上下线:客户端能实时洞察到服务器上下线的变化。

软负载均衡:在Zookeeper中记录每台服务器的访问数,让访问最少的服务器去处理最新的客户端请求。

下载地址

官网首页:Index of /zookeeper

在Linux中可以用wget命令安装

wget  https://downloads.apache.org/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz

二、Zookeeper安装

2.1本地模式安装

前提准备

1)安装jdk

2)解压Zookeeper.tar.gz到指定目录

tar -zxvf zookeeper-3.7.2.tar.gz -C /opt/module/

配置修改

1)将解压后的zookeeper的zoo_sample.cfg修改为zoo.cfg;

mv zoo_sample.cfg zoo.cfg    # 先进入zookeeper文件后再执行此条命令

2)打开zoo.cfg文件,修改dataDir路径;

gedit zoo.cfg

# dataDir=/opt/module/zookeeper-3.7.2/zkData

3)在/opt/module/zookeeper-3.7.2/目录上创建zkData文件夹;

mkdir zkData

启动Zookeeper

 1)启动Zookeeper

bin/zkServer.sh start

2)查看进程是否启动

jps
# 出现QuorumPeerMain说明启动成功

3)查看状态

bin/zkServer.sh status

4)启动客户端

bin/zkCli.sh

5)退出客户端

quit

6)停止Zookeeper

bin/zkServer.sh stop

2.2配置参数解读

  • Zookeeper中的配置文件zoo.cfg中参数含义:
  • tickTime=2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位ms
  • initLimit=10:LF初始通信时限
  • syncLimit=5:LF同步通信时限
  • clientPort=2181:客户端访问端口号
  • dataDir:存储数据路径

三、Zookeeper内部原理

3.1选举机制

1)半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。

2)Zookeeper在配置文件中没有指定Master和Slave。但是Zookeeper工作时有一个节点是Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的。

a. 初始阶段
  • 每个节点向其他节点发送投票信息,包含 (myid, ZXID, epoch)

  • 节点初始默认投给自己。

b. 投票比较
  • 当节点收到其他节点的投票时,按上述规则比较:

    • 若收到的投票比自己的更优,则更新投票并转发新投票。

    • 否则忽略该投票。

c. 确定 Leader
  • 当某个节点获得 超过半数(Quorum) 的投票时,成为 Leader。

  • 其余节点成为 Follower/Observer,切换到 FOLLOWING 或 OBSERVING 状态

3.2节点类型

持久(Persistent)型节点

  • 客户端和服务器断开连接后,创建的节点不删除
  • 客户端与Zookeeper断开连接后,Zookeeper给该节点名称进行顺序编号

短暂(Ephemeral)型节点

  • 客户端和服务器断开连接后,创建的节点自己删除
  • 客户端与Zookeeper断开连接后,Zookeeper给该节点名称进行顺序编号

3.3 Stat结构体

1)czxid:创建节点的事务zxid值

2)ctime:znode被创建的毫秒数(从1970年开始)

3)mzxid:znode最后更新的事务zxid

4)mtime:znode最后修改的毫秒数(从1970年开始)

5)pZxid:znode最后更新的子节点zxid

6)cversion:znode子节点变化号,zonde子节点修改次数

7)dataversion:znode数据变化号

8)aclVersion:znode访问控制列表的变化号

9)ephemeralOwner:如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。

10)dataLength:znode的数据长度

11)numChileren:znode子节点数量

3.4监听器原理

1)首先要有一个main()线程

2)在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener)。

3)通过connet线程将注册的监听事件发送给Zookeeper

4)在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。

5)Zookeeper监听到有数据或路径变化,就会将这个消息发送到listener线程。

6)listener线程内部调用了process()方法。

3.5写数据流程

客户端client发给Zookeeper的数据如何在各个服务器之间保持一致的问题。

1)Clinet向一个Server1上写数据,发送一个请求。

2)如果Server1不是Leader,那么Server1会将收到的请求进一步转发给Leader;然后Leader再将该请求广播给其他Server。各Server写成功后会通知Leader。

3)当Leader收到半数以上的Server数据写成功时,会告诉Server1数据写成功了。

4)Server1会进一步通知Client数据写成功了。


http://www.kler.cn/a/539591.html

相关文章:

  • 激活函数篇 04 —— softmax函数
  • DeepSeek和ChatGPT的优劣或者区别(答案来DeepSeek和ChatGPT)
  • [笔记] 汇编杂记(持续更新)
  • Elasticsearch 生产集群部署终极方案
  • 【Pytorch函数】PyTorch随机数生成全解析 | torch.rand()家族函数使用指南
  • 浅析Ruby类污染及其在Sinatra框架下的利用
  • ansible使用学习
  • 大数据治理:从计算优化到组织效能提升的全面解析
  • RK3568上使用C++结合V4L2拉流,并RKMPP硬件编解码,并保存为MP4文件
  • .NET 使用 HttpClient 从 URL 下载任何类型的文件数据
  • Unity 快速入门 1 - 界面操作
  • 【03】 区块链分布式网络
  • 2025我的第二次社招,写在春招之季
  • DeepSeek RAGFlow构建本地知识库系统
  • skia-macos源码编译
  • Kubernetes之kube-proxy运行机制分析
  • gitlab多项目流水线
  • Vue与Konva:解锁Canvas绘图的无限可能
  • JVM的性能优化
  • 查询已经运行的 Docker 容器启动命令
  • 2、Python面试题解析:如何进行字符串插值?
  • 了解大语言模型的基本原理(一)——Transformer工作原理
  • 动手学深度学习 -- 3.6 数学推演
  • 【C++学习篇】C++11第二期学习
  • Palatir和它的AIP
  • Redis 事务和 “锁机制”——> 并发秒杀处理的详细说明