Zookeeper安装与操作

本文深入讲解ZooKeeper,一个用于解决分布式应用数据管理问题的框架。涵盖了ZooKeeper的基本概念,如临时节点、永久节点、顺序节点及监视器,安装步骤,以及如何使用客户端命令和Java API进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是zookeeper

官方文档上是这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

以上的介绍感觉还是有点抽象了,以下是大数据中的通俗解释!!!!

Zookeeper字面上理解就是动物管理员,是大数据框架Hadoop生态圈中的一个服务中间件,Hadoop生态圈中很多开源项目使用动物命名,那么需要一个管理员来管理这些“动物”。他负责分布式应用程序协调的工作。
hadoop框架
Zookeeper主要提供一下四种功能:统一服务名、配置管理、集群管理、共享锁和列队管理。用于高效的管理集群的运行。zookeeper通过心跳机制可以检测挂掉的机器并将挂掉的机器ip和服务对应关系从列表中删除。zookeeper部署有三种方式:单机模式、集群模式、伪集群模式,一下用Docker的方式部署。

ZooKeeper中的节点有两种,分别为临时节点和永久节点。节点的类型在创建时即被确定,并且不能改变。

临时节点:该节点的生命周期依赖于创建它们的会话。一旦会话(Session)结束,临时节点将被自动删除,当然可以也可以手动删除。虽然每个临时的Znode都会绑定到一个客户端会话,但他们对所有的客户端还是可见的。另外,ZooKeeper的临时节点不允许拥有子节点。

永久节点:该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,他们才能被删除。

顺序节点:当创建Znode的时候,用户可以请求在ZooKeeper的路径结尾添加一个递增的计数。这个计数对于此节点的父节点来说是唯一的,它的格式为"%10d"(10位数字,没有数值的数位用0补充,例如"0000000001")。当计数值大于232-1时,计数器将溢出。

监视器:客户端可以在节点上设置watch,我们称之为监视器。当节点状态发生改变时(Znode的增、删、改)将会触发watch所对应的操作。当watch被触发时,ZooKeeper将会向客户端发送且仅发送一条通知,因为watch只能被触发一次,这样可以减少网络流量。

注意: 集群为大于等于3个奇数,如 3、5、7,不宜太多,集群机器多了选举和数据同步耗时长,不稳定。
安装zookeeper:

Step1:配置JAVA环境,检验环境:java -version
Step2:去官网下载,并解压

# cd /usr/local
# wget http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz
# tar -zxvf zookeeper-3.4.12.tar.gz
# cd zookeeper-3.4.12

Step3:重命名配置文件zoo_sample.cfg

# cp conf/zoo_sample.cfg conf/zoo.cfg

Step4:直接启动zookeeper

# bin/zkServer.sh start

Step5:测试一下zookeeper是否启动成功

# bin/zkCli.sh
Zookeeper使用

使用客户端命令操作zookeeper
1、使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
在这里插入图片描述
2、创建一个新的 znode ,使用 create /zkPro myData
在这里插入图片描述
3、再次使用 ls 命令来查看现在 zookeeper 中所包含的内容:
在这里插入图片描述
4、下面我们运行 get 命令来确认第二步中所创建的 znode 是否包含我们所创建的字符串:
在这里插入图片描述
5、下面我们通过 set 命令来对 zk 所关联的字符串进行设置:
在这里插入图片描述
6、下面我们将刚才创建的 znode 删除
在这里插入图片描述

使用Java API操作zookeeper

资料来源连接:https://www.jianshu.com/p/4322a5ecad39

ZooKeeper服务命令,命令行工具的一些简单操作如下:

1. 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
2. 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
3. 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串
4. 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
5. 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置
6. 删除文件: delete /zk 将刚才创建的 znode 删除
7. 退出客户端: quit
8. 帮助命令: help

创建maven项目,导入zookeeper相关包

<dependencies>
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.4.7</version>
    </dependency>
</dependencies>

1、连接zookeeper

public class TestCase {

    private static final String connectionString = "192.168.25.127:2181,"
            + "192.168.25.129:2181,"
            + "192.168.25.130:2181";
    public static final Integer sessionTimeout = 2000;
    public static ZooKeeper zkClient = null;
    @Before
    public void init() throws Exception{
    //三个参数分别为连接的zookeeper集群服务器的ip,超时时间,监听器
        zkClient = new ZooKeeper(connectionString, sessionTimeout, new Watcher(){
            //收到事件通知后的回调函数(应该是我们自己的事件处理逻辑)
            public void process(WatchedEvent event) {
                System.out.println(event.getType()+","+event.getPath());
            }});
    }

命令行查看

[zk: localhost:2181(CONNECTED) 1] ls /
[app1, idea, test, servers, zookeeper]

2、创建数据节点到zk中

@Test   
public void createNode() throws Exception{
    /*
     * 传入四个参数
     * 1、创建的节点
     * 2、节点数据
     * 3、节点的权限,OPEN_ACL_UNSAFE表示内部应用权限
     * 4、节点类型,4种:持久化节点,带序列持久化节点,临时节点,带序列的临时节点
     */
    String path = zkClient.create("/idea", 
            "helloworld".getBytes(), 
            Ids.OPEN_ACL_UNSAFE, 
            CreateMode.PERSISTENT);
    System.out.println(path);
}

3、获取子节点

@Test   
public void getChildren()  throws Exception{
    /*
     * 传入2个参数
     * 1、指定获取哪个节点的孩子
     * 2、是否使用监听器(watcher),true表示使用以上的监听功能
     */
    List<String> children = zkClient.getChildren("/",true);
    for (String child : children) {
        System.out.println(child);
    }
    System.in.read();
}

控制台输出

	None,null
	app1
	idea
	test
	zookeeper
	servers
总结

今天就先写到这里,当然zookeeper远比我们这里描述的功能多,比如zk中的选举机制、实现集群管理、分布式锁、分布式队列;zookeeper还有很多类似的应用大多都是基于上面的特性。总的来说,zk只是一个提供了一些特性的系统,用户根据这些特性自己定义了它的用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值