Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >喝杯咖啡了解下zookeeper的基本操作

喝杯咖啡了解下zookeeper的基本操作

作者头像
技术从心
发布于 2019-08-06 11:20:30
发布于 2019-08-06 11:20:30
55900
代码可运行
举报
文章被收录于专栏:技术从心技术从心
运行总次数:0
代码可运行

什么是zookeeper?

官方版:

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper包含一个简单的原语集, 提供Java和C的接口。

ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

作者目前使用到的:

在ZooKeeper上创建节点然后再对应的节点上进行增删的操作的同时使用Curator引入了Cache来实现对Zookeeper服务端事件监听,Cache事件监听可以理解为一个本地缓存视图与远程Zookeeper视图的对比过程。Cache提供了反复注册的功能。Cache分为两类注册类型:节点监听和子节点监听。

每个子目录项如 NameService 都被称作为znode,和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。 有四种类型的znode: 1、PERSISTENT-持久化目录节点 客户端与zookeeper断开连接后,该节点依旧存在 。 2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号 。 3、EPHEMERAL-临时目录节点 客户端与zookeeper断开连接后,该节点被删除 。 4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点 。

话不多说首先我们来来看看zookeeper在linux下的安装吧!

在linux下安装zookeeper的之前我们首先要安装jdk,对于jdk的安装我们使用yum命令安装非常的简便

1.列出所有jdk版本:

yum -y list java*

2.选择版本安装

yum -y install java-1.7.0-openjdk*

3.验证是否ok

java

javac

java -version

zookeeper在linux的安装那就更加的简便了到zookeeper官网下载稳定版 https://archive.apache.org/dist/zookeeper 的 tar.gz 的上传至linux下的/usr/local目录下其实放在哪个目录下都随意将包解压命令tar -zxvf 包的名称 即可解压到当前目录

进入到zookeeper的bin目录下

输入 sh zkServer.sh start 启动zookeeper

输入sh zkCli.sh 进入zookeeper的命令行查看当前我的zookeeper的节点

admin和zk-huey是小编自己创建的。

接下来我们一起走进代码编写吧

小编先贴上代码的截图吧

引入zookeeper所需要的jar包

代码实现
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.open.zookeeper;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import org.apache.curator.framework.CuratorFramework;import org.apache.curator.framework.CuratorFrameworkFactory;import org.apache.curator.framework.recipes.cache.NodeCache;import org.apache.curator.framework.recipes.cache.NodeCacheListener;import org.apache.curator.framework.recipes.cache.PathChildrenCache;import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener;import org.apache.curator.framework.recipes.cache.PathChildrenCache.StartMode;import org.apache.curator.retry.ExponentialBackoffRetry;/** * @author lyj * @date 2019年1月8日 上午10:00:25 * Curator事件监听测试 * 使用Curator监听事件 */public class CarutorDemo {	/**	 * ZooKeeper原生的API支持通过注册Watcher来进行事件监听,但是Watcher通知是一次性的,	 * 因此开发过程中需要反复注册Watcher,比较繁琐。Curator引入了Cache来监听ZooKeeper服务端的事件。	 * Cache对ZooKeeper事件监听进行了封装,能够自动处理反复注册监听,简化了ZooKeeper原生API繁琐的开发过程。	 * @param args	 * @throws Exception	 */		public static void main(String[] args) throws Exception {        CuratorFramework client = CuratorFrameworkFactory.builder()            .connectString("118.25.26.200:2181")            .sessionTimeoutMs(5000)            .connectionTimeoutMs(3000)            .retryPolicy(new ExponentialBackoffRetry(1000, 3))            .build();        client.start();                // 创建节点        client.create()            .creatingParentsIfNeeded()            .forPath("/zk-huey/cnode", "hello".getBytes());                /**         * 在注册监听器的时候,如果传入此参数,当事件触发时,逻辑由线程池处理         */        ExecutorService pool = Executors.newFixedThreadPool(2);                /**         * 监听数据节点的变化情况         */        final NodeCache nodeCache = new NodeCache(client, "/zk-huey/cnode", false);        nodeCache.start(true);        nodeCache.getListenable().addListener(            new NodeCacheListener() {                @Override                public void nodeChanged() throws Exception {                    System.out.println("Node data is changed, new data: " +                         new String(nodeCache.getCurrentData().getData()));                }            },             pool        );                /**         * 监听子节点的变化情况         */        final PathChildrenCache childrenCache = new PathChildrenCache(client, "/zk-huey", true);        childrenCache.start(StartMode.POST_INITIALIZED_EVENT);        childrenCache.getListenable().addListener(            new PathChildrenCacheListener() {                @Override                public void childEvent(CuratorFramework client, PathChildrenCacheEvent event)                        throws Exception {                        switch (event.getType()) {                        case CHILD_ADDED:                            System.out.println("CHILD_ADDED: " + event.getData().getPath());                            break;                        case CHILD_REMOVED:                            System.out.println("CHILD_REMOVED: " + event.getData().getPath());                            break;                        case CHILD_UPDATED:                            System.out.println("CHILD_UPDATED: " + event.getData().getPath());                            break;                        default:                            break;                    }                }            },            pool        );                client.setData().forPath("/zk-huey/cnode", "world".getBytes());         Thread.sleep(10 * 1000);        pool.shutdown();        client.close();    }	}
运行之后的效果:

当前的节点下是没有子节点的看看有子节点的效果
存储数据之后的效果到此我么的zookeeper的zookeeper的基本使用就到这了
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术从心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Zookeeper技术系列】「Curator」给大家介绍Zookeeper的”开发伴侣”(组件篇)
Curator-Framework是ZooKeeper Client更高的抽象API,最佳核心的功能就是自动连接管理:
码界西柚
2022/01/13
1K0
【Zookeeper技术系列】「Curator」给大家介绍Zookeeper的”开发伴侣”(组件篇)
基于Apache Curator框架的ZooKeeper使用详解
Apache Curator是一个比较完善的ZooKeeper客户端框架,通过封装的一套高级API 简化了ZooKeeper的操作。通过查看官方文档,可以发现Curator主要解决了三类问题:
BUG弄潮儿
2020/06/29
1.7K0
zookeeper curator使用caches实现各种监听
1、篇首语 curator是zookeeper的一个高级api开发包。封装了zookeeper众多的recipes,并且实现了一些新的recipes原语,最重要的是基于zookeeper提供的各种机制实现了更健壮的连接和异常处理。 本文将其中比较常用的一种recipe,就是cache。 2、各种Caches cache是一种缓存机制,可以借助cache实现监听。 简单来说,cache在客户端缓存了znode的各种状态,当感知到zk集群的znode状态变化,会触发event事件,注册的监听器会处理这些事件。是
用户1225216
2018/03/05
2.3K0
Apache Curator操作zookeeper的API使用
配置完依赖后,我们就可以来写一个简单的demo测试与zookeeper服务端的连接。代码如下:
端碗吹水
2020/09/23
1.1K0
Apache Curator操作zookeeper的API使用
Zookeeper 分布式协调服务介绍
分布式系统的简单定义:分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
小旋锋
2019/01/28
8000
Zookeeper 分布式协调服务介绍
Zookeeper开源客户端Curator之事件监听详解
程序新视界
2018/01/08
1.9K0
Curator使用手册
这里就体现了用Cutaotr的好处了,不需要先创建父才创建子,可以设置检测需要父时候却没有的请看下自动创建
名字是乱打的
2021/12/22
1.8K0
Curator使用手册
Zookeeper-3.3-Watcher 特性详解
        client端会对某个znode 注册一个watcher事件,当该znode发生变化时,这些client会收到ZooKeeper的通知,然后client可以根据znode变化来做出业务上的改变等。
江中散人_Jun
2023/10/16
3920
Zookeeper-3.3-Watcher 特性详解
跟着实例学习ZooKeeper的用法: 缓存
可以利用ZooKeeper在集群的各个节点之间缓存数据。 每个节点都可以得到最新的缓存的数据。 Curator提供了三种类型的缓存方式:Path Cache,Node Cache 和Tree Cache。 Path Cache Path Cache用来监控一个ZNode的子节点. 当一个子节点增加, 更新,删除时, Path Cache会改变它的状态, 会包含最新的子节点, 子节点的数据和状态。 这也正如它的名字表示的那样, 那监控path。 实际使用时会涉及到四个类: PathChildrenCache
用户1263954
2018/01/30
1.2K0
ZK客户端Curator使用详解
zookeeper不是为高可用性设计的,但它使用ZAB协议达到了极高的一致性,所以是个CP系统。所以它经常被选作注册中心、配置中心、分布式锁等场景。
xjjdog
2020/04/27
2.8K0
zookeeper javaApi 事件监听
Watcher 监听机制是 Zookeeper 中非常重要的特性,我们基于 zookeeper 上创建的节点,可以对这些节点绑定监听 事件,比如可以监听节点数据变更、节点删除、子节点状态变更等事件,通过这个事件机制,可以基于 zookeeper 实现分布式锁、集群管理等功能 watcher 特性:当数据发生变化的时候, zookeeper 会产生一个 watcher 事件,并且会发送到客户端。但是客户端 只会收到一次通知。如果后续这个节点再次发生变化,那么之前设置 watcher 的客户端不会再次收到消息。(watcher 是一次性的操作)。 可以通过循环监听去达到永久监听效果
周杰伦本人
2022/10/25
1.2K0
Apach Curator 框架源码分析:后台构造器和节点操作相关源码分析(二)
本文介绍后台任务延迟队列的“元素” 后台任务构造器 以及Curator 对于常见的ZK节点操作封装API。后台任务构造器对应了和ZK交互的常见”后台“操作,比如创建和销毁Watch,而ZK节点操作API涉及各种建造者模式的应用。可以说,Curator 整个框架各种地方都有建造者模式的身影。
阿东
2023/07/21
5420
Apach Curator 框架源码分析:后台构造器和节点操作相关源码分析(二)
zookeeper使用
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
5740
Zookeeper之Watcher监听事件丢失分析
程序新视界
2018/01/08
2.9K0
ZooKeeper学习总结【概念,安装配置,命令操作,JAVA API操作,集群搭建,案例所写代码】
Zookeeper 翻译过来就是 动物园管理员,他是用来管 Hadoop(大象)、Hive(蜜蜂)、Pig(小 猪)的管理员。简称zk。
叫我阿杰好了
2022/11/07
5300
ZooKeeper学习总结【概念,安装配置,命令操作,JAVA API操作,集群搭建,案例所写代码】
ZookeeperZNode基本命令四字命令SessionWatcherACLZookeeper集群Paxos算法ZAB协议Curator分布式锁
在Zookeeper中,ZNode可以分为持久节点和临时节点两类。所谓持久节点是指一旦这个ZNode被创建了,除非主动进行ZNode的移除操作,否则这个ZNode将一直保存在Zookeeper上。而临时节点就不一样了,它的生命周期和客户端会话绑定,一旦客户端会话失效,那么这个客户端创建的所有临时节点都会被移除。另外,ZooKeeper还允许用户为每个节点添加一个特殊的属性:SEQUENTIAL.一旦节点被标记上这个属性,那么在这个节点被创建的时候,Zookeeper会自动在其节点名后面追加上一个整型数字,这个整型数字是一个由父节点维护的自增数字。
spilledyear
2018/10/15
9980
分布式协调框架 Zookeeper 核心设计 理解与实战,并实现一个主备切换
想起很久以前在某个客户现场,微服务 B 突然无法调用到微服务 A,为了使服务尽快正常恢复,重启了微服务 B 。
kk大数据
2021/07/30
1.1K0
【Zookeeper的客户端使用和集群特性】
项目构建 zookeeper 官方的客户端没有和服务端代码分离,他们为同一个jar 文件,所以我们直接引入zookeeper的maven即可, 这里版本请保持与服务端版本一致,不然会有很多兼容性的问题
Java廖志伟
2022/03/07
9780
【Zookeeper的客户端使用和集群特性】
Curator实现zookeeper的节点监听
Curtor框架中一共有三个实现监听的方式 一种是NodeCache监听指定节点 一种是pathChildrenCache监听子节点 一种是TreeCache可以监控所有节点 相当于以上两种的合集
暴躁的程序猿
2022/03/24
6120
Curator实现zookeeper的节点监听
ZooKeeper 相关概念以及使用小结
Dubbo 通过注册中心在分布式环境中实现服务的注册与发现,而注册中心通常采用 ZooKeeper,研究注册中心相关源码绕不开 ZooKeeper,所以学习了 ZooKeeper 的基本概念以及相关 API 操作。
andyxh
2019/09/05
4780
ZooKeeper 相关概念以及使用小结
推荐阅读
相关推荐
【Zookeeper技术系列】「Curator」给大家介绍Zookeeper的”开发伴侣”(组件篇)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验