广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java Zookeeper简述
  • 298
分享到

java Zookeeper简述

2024-04-02 19:04:59 298人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录ZooKeeper 角色LeaderFollowerObserverZookeeper 工作原理(原子广播) Znode 四种形式的目录节点ZooKeeper 安装和使

Zookeeper 是一个分布式协调服务,可用于服务发现,分布式,分布式领导选举,配置管理等。Zookeeper 提供了一个类似于 linux 文件系统的树形结构(可认为是轻量级的内存文件系统,但只适合存少量信息,完全不适合存储大量文件或者大文件),同时提供了对于每个节点的监控通知机制。

Zookeeper 角色

Zookeeper 集群是一个基于主从复制的高可用集群,每个服务器承担如下三种角色中的一种

Leader

1.一个 Zookeeper 集群同一时间只会有一个实际工作的 Leader,它会发起并维护与各 Follwer及 Observer 间的心跳。

2.所有的写操作必须要通过 Leader 完成再由 Leader 将写操作广播给其它服务器。只要有超过半数节点(不包括 observeer 节点)写入成功,该写请求就会被提交(类 2PC 协议)。

Follower

1.一个 Zookeeper 集群可能同时存在多个 Follower,它会响应 Leader 的心跳,

2.Follower 可直接处理并返回客户端的读请求,同时会将写请求转发给 Leader 处理,

3.并且负责在 Leader 处理写请求时对请求进行投票。

Observer

角色与 Follower 类似,但是无投票权。Zookeeper 需保证高可用和强一致性,为了支持更多的客户端,需要增加更多 Server;Server 增多,投票阶段延迟增大,影响性能;引入 Observer,Observer 不参与投票; Observers 接受客户端的连接,并将写请求转发给 leader 节点; 加入更多 Observer 节点,提高伸缩性,同时不影响吞吐率。

在这里插入图片描述

Zookeeper 工作原理(原子广播)

1.Zookeeper 的核心是原子广播,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 Zab 协议。Zab 协议有两种模式,它们分别是恢复模式和广播模式。

2.当服务启动或者在领导者崩溃后,Zab 就进入了恢复模式,当领导者被选举出来,且大多数 server 的完成了和 leader 的状态同步以后,恢复模式就结束了。

3.状态同步保证了 leader 和 server 具有相同的系统状态

4.一旦 leader 已经和多数的 follower 进行了状态同步后,他就可以开始广播消息了,即进入广播状态。这时候当一个 server 加入 zookeeper 服务中,它会在恢复模式下启动,发现 leader,并和 leader 进行状态同步。待到同步结束,它也参与消息广播。Zookeeper服务一直维持在 Broadcast 状态,直到 leader 崩溃了或者 leader 失去了大部分的followers 支持。

5.广播模式需要保证 proposal 被按顺序处理,因此 zk 采用了递增的事务 id 号(zxid)来保证。所有的提议(proposal)都在被提出的时候加上了 zxid。

6.实现中 zxid 是一个 64 为的数字,它高 32 位是 epoch 用来标识 leader 关系是否改变,每次一个 leader 被选出来,它都会有一个新的 epoch。低 32 位是个递增计数。

7.当 leader 崩溃或者 leader 失去大多数的 follower,这时候 zk 进入恢复模式,恢复模式需要重新选举出一个新的 leader,让所有的 server 都恢复到一个正确的状态。

 Znode 四种形式的目录节点

  • PERSISTENT:持久的节点。
  • EPHEMERAL:暂时的节点。
  • PERSISTENT_SEQUENTIAL:持久化顺序编号目录节点。
  • EPHEMERAL_SEQUENTIAL:暂时化顺序编号目录节点。

ZooKeeper 安装和使用

  • 使用 Docker 下载 ZooKeeper

docker pull zookeeper:3.5.8

  • 运行 ZooKeeper

docker run -d --name zookeeper -p 2181:2181 zookeeper:3.5.8

  • 连接 ZooKeeper 服务

先使用 docker ps 查看 ZooKeeper 的 ContainerID,然后使用 docker exec -it ContainerID /bin/bash 命令进入容器中。
进入 bin 目录,然后通过 ./zkCli.sh -server 127.0.0.1:2181命令连接ZooKeeper 服务

root@eaf70fc620cb:/apache-zookeeper-3.5.8-bin# cd bin

成功连接 ZooKeeper 服务后页面

在这里插入图片描述

常用命令

可通过 help 命令查看 ZooKeeper 常用命令

  • 创建节点(create 命令)

通过 create 命令在根目录创建了 node1 节点,与它关联的字符串是"node1"

[zk: 127.0.0.1:2181(CONNECTED) 34] create /node1 “node1”

通过 create 命令在根目录创建了 node1 节点,与它关联的内容是数字 123

[zk: 127.0.0.1:2181(CONNECTED) 1] create /node1/node1.1 123
Created /node1/node1.1

更新节点数据内容(set 命令)

[zk: 127.0.0.1:2181(CONNECTED) 11] set /node1 "set node1"

  • 获取节点的数据(get 命令)

get 命令可以获取指定节点的数据内容和节点的状态,可以看出我们通过 set 命令已经将节点数据内容改为 “set node1”。


set node1
cZxid = 0x47
ctime = Sun Jan 20 10:22:59 CST 2019
mZxid = 0x4b
mtime = Sun Jan 20 10:41:10 CST 2019
pZxid = 0x4a
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 1
  • 查看某个目录下的子节点(ls 命令)

通过 ls 命令查看根目录下的节点

[zk: 127.0.0.1:2181(CONNECTED) 37] ls /
[dubbo, ZooKeeper, node1]

通过 ls 命令查看 node1 目录下的节点

[zk: 127.0.0.1:2181(CONNECTED) 5] ls /node1
[node1.1]

ZooKeeper 中的 ls 命令和 linux 命令中的 ls 类似, 这个命令将列出绝对路径 path 下的所有子节点信息(列出 1 级,并不递归

  • 查看节点状态(stat 命令)

通过 stat 命令查看节点状态


[zk: 127.0.0.1:2181(CONNECTED) 10] stat /node1
cZxid = 0x47
ctime = Sun Jan 20 10:22:59 CST 2019
mZxid = 0x47
mtime = Sun Jan 20 10:22:59 CST 2019
pZxid = 0x4a
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 1
  • 查看节点信息和状态(ls2 命令)

ls2 命令更像是 ls 命令和 stat 命令的结合。 ls2 命令返回的信息包括 2 部分:

1.子节点列表

2.当前节点的 stat 信息。


[zk: 127.0.0.1:2181(CONNECTED) 7] ls2 /node1
[node1.1]
cZxid = 0x47
ctime = Sun Jan 20 10:22:59 CST 2019
mZxid = 0x47
mtime = Sun Jan 20 10:22:59 CST 2019
pZxid = 0x4a
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 1
  • 删除节点(delete 命令)

这个命令很简单,但是需要注意的一点是如果你要删除某一个节点,那么这个节点必须无子节点才行。

[zk: 127.0.0.1:2181(CONNECTED) 3] delete /node1/node1.1

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: java Zookeeper简述

本文链接: https://www.lsjlt.com/news/134754.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java Zookeeper简述
    目录Zookeeper 角色LeaderFollowerObserverZookeeper 工作原理(原子广播) Znode 四种形式的目录节点ZooKeeper 安装和使...
    99+
    2022-11-12
  • Java注解(annotation)简述
    目录Java注解(annotation)简单上手1、什么是注解?2、java内置注解3、注解的基本运总结Java注解(annotation)简单上手 反射reflect:https:...
    99+
    2022-11-12
  • Java中List的简述
    Java中的List是一种有序的集合,它允许存储重复的元素。List接口是Java集合框架中的一部分,它继承自Collection接...
    99+
    2023-09-13
    Java
  • Zookeeper简介
    1.1 什么是zookeeper Zookeeper是一个分布式的、开源的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Apache Hadoop的一个子项目,主要是用来解决分布式应用中经常遇到的一些数据...
    99+
    2017-07-20
    Zookeeper简介
  • 【JAVA】 String 类简述笔记
    个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言String类创建一个String类 常用方法字符串长度 length() 方法连接字符串 concat() 方法创建...
    99+
    2023-08-16
    java 笔记 python
  • Java中dubbo+zookeeper微服务架构简介
    目录1、ApacheDubbo概述1.1、Dubbo简介1.2、Dubbo的服务架构2、服务注册中心Zookeeper2.1、ZooKeeper介绍2.2、ZooKeeper安装2....
    99+
    2022-11-12
  • 【YOLOX简述】
    YOLOX的简述 一、 原因1. 背景2. 概念 二、 算法介绍2.1 YOLOX算法结构图:2.2 算法独特点2.3 Focus网络结构2.4 FPN,PAN2.5 BaseConv2....
    99+
    2023-10-25
    深度学习 计算机视觉 人工智能
  • 简述SpringMVC
    一、典型的Servlet + JSP + JavaBean UserServlet看作业务逻辑处理(Controller)User看作模型(Model)user.jsp看作渲染(View) 二、高级MVC 由DispatcherServ...
    99+
    2023-08-30
    java spring servlet
  • Java中简单实用Quartz概述
    目录1.Quartz是什么2. Quartz谁维护?3. 简单的应用3.1 需求描述3.1.1. Spring中自带的3.1.2. Quartz的简单使用4. Quartz相较Spr...
    99+
    2023-02-15
    java  quartz java  quartz使用
  • 简述Java中throw-throws异常抛出
    目录一、throws抛出异常 Throws抛出异常的规则:二、使用throw抛出异常 三、比较 3.1 在声明方法时候抛出异常  3.2 在方法中抛出异常  &n...
    99+
    2022-11-12
  • Java的三种代理模式简述
    目录一、代理模式是什么二、Java的三种代理模式1.静态代理2.动态代理(也叫JDK代理) 3.Cglib代理一、代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况...
    99+
    2022-11-12
  • 简述Java中的四种引用类型
    目录简介 强引用 软引用 弱引用 虚引用 简介 从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用...
    99+
    2022-11-12
  • java连接zookeeper实现zookeeper教程
    目录java连接zookeeper实现zookeeperZookeeperJavaAPI基本操作1.连接客户端2.恢复回话3.创建节点4.修改节点5.删除节点6.查询节点7.查询子节...
    99+
    2022-11-12
  • zookeeper:简介及常用命令
    目录 一、Zookeeper简介 二、Zookeeper服务端常用命令 1、启动ZooKeeper服务 2、查看ZooKeeper服务状态 3、停止ZooKeeper服务 4、重启ZooKeeper服务 三、Zookeeper客户端常用命...
    99+
    2023-10-03
    java-zookeeper zookeeper 大数据
  • 简单阐述一下Java集合的概要
    概念 Java中的集合就是一种容器,可以容纳不同种类的数据,这些容纳是建立在未知的基础上。 优点 1.可以动态保存任意多个对象,使用比较方便。 2.提供一系列方便的操作对象的方法:a...
    99+
    2022-11-12
  • 简述Java编程语言对象的容纳
    如果一个程序只含有数量固定的对象,而且已知它们存在的时间,那这个程序是相当简单的。数组容纳对象有很多方式,数组是其中最为普遍的一种,它主要有如下两个特点:效率和类型。对于Java来说,为保存和访问一系列对象(实际是对象的句柄),最有效率的方...
    99+
    2023-05-31
    java 对象容纳 ava
  • Android WIFI使用简述
    前言   随着Android版本的更新,目前最新的版本是Android 13,并且已经有部分国产手机更新了此版本,对于Android开发者来说,变化其实不那么大,而对于本文章来说就有一些变化。 正文 ...
    99+
    2023-10-12
    android android studio gradle
  • oracle 异步IO简述
           在同步IO中,线程启动一个IO请求之后就进入等待状态,知道IO结束后线程才结束等待,转而去处理其他请求。异步IO将IO请求发送到内...
    99+
    2022-10-18
  • Android中的ANR简述
    ANR是Application Not responding,指应用程序未响应,Android系统如果超过预定时间未能得到有效响应或者响应时间过长,都会造成ANR,因为Android系统对于一些事件需要在一定的时间范围内...
    99+
    2023-06-04
  • Android RecyclerView使用简述
    RecyclerView使用简述 前言正文一、创建项目二、RecyclerView基本使用① item布局和适配器② 显示数据③ 添加Item点击事件④ 添加Item子控件点击事件⑤ 添加长按事件⑥ 多个子控件点击事件 三、R...
    99+
    2023-08-21
    RecyclerView 多级列表 滑动拖动 多布局 动态数据
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作