java操作zookeeper

java操作zookeeper

文档

  1. linux安装java -centos安装java -linux配置java环境变量
  2. zookeeper单机安装
  3. zookeeper集群安装
  4. zookeeper客户端命令行操作、节点类型及监听器
  5. zookeeper集群写数据原理
  6. java操作zookeeper

依赖信息

xml 复制代码
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.2</version>
</dependency>
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.5.7</version>
</dependency>

log4j配置文件

在resources下创建log4j.properties文件

properties 复制代码
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d   %p  [%c]    -   %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d   %p  [%c]    -   %m%n

java操作zookeeper参考代码

  • 包括连接zookeeper、创建节点、获取子节点列表、判断节点是否存在、监听等方法
  • 注释中包含注意事项
java 复制代码
package xin.yangshuai.zookeeper01.client;

import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;

import java.io.IOException;
import java.util.List;

public class ZkClient {

    private ZooKeeper zkClient;

    // 注意:逗号左右不能有空格
    private String connectString = "192.168.145.132:2181,192.168.145.133:2181,192.168.145.134:2181";
    // 2000毫秒
    private int sessionTimeout = 2000;

    /**
     * 连接zookeeper
     *
     * @throws IOException
     */
    public void init() throws IOException {
        zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                // 初始化时,会执行一次
                System.out.println(watchedEvent.getPath() + "-------------");
                try {
                    // 注册一次,监听一次,如果想持续监听,可重新注册
                    // getChildren()方法设置了监听,所以每次调用将重新注册监听
                    getChildren();
                } catch (KeeperException | InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * 创建一个节点
     *
     * @throws KeeperException
     * @throws InterruptedException
     */
    public void create() throws KeeperException, InterruptedException {
        String node = zkClient.create("/client", "create-test".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println("Created " + node);
    }

    /**
     * 获取子节点
     *
     * @throws KeeperException
     * @throws InterruptedException
     */
    public void getChildren() throws KeeperException, InterruptedException {
        // 参数watch设置为true,表示使用zkClient创建时的Watcher,并监听当前节点的子节点的增删变化
        List<String> children = zkClient.getChildren("/", true);
        for (String child : children) {
            System.out.println("children " + child);
        }
    }

    /**
     * 判断节点是否存在
     *
     * @throws KeeperException
     * @throws InterruptedException
     */
    public void exist() throws KeeperException, InterruptedException {
        Stat stat = zkClient.exists("/client", false);
        System.out.println(stat == null ? "not exist" : "exist");
        stat = zkClient.exists("/client1", false);
        System.out.println(stat == null ? "not exist" : "exist");
    }

    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        ZkClient zkClient = new ZkClient();
        zkClient.init();
        zkClient.create();
        // getChildren()方法不用手动调用,zookeeper客户端初始化时,会调用监听器的process方法,可在该方法中调用getChildren()方法
        // zkClient.getChildren();
        zkClient.exist();

        // 保持运行状态,来观察监听器的动作
        Thread.sleep(Long.MAX_VALUE);

        // 可在命令行增删节点 / 的子节点,来触发监听器动作
    }
}

java中的zookeeper节点类型

properties 复制代码
持久无序号节点:CreateMode.PERSISTENT
持久有序号节点:CreateMode.PERSISTENT_SEQUENTIAL
临时无序号节点:CreateMode.EPHEMERAL
临时有序号节点:CreateMode.EPHEMERAL_SEQUENTIAL
相关推荐
JLWcai2025100915 天前
铸造领域树脂砂轮|金利威多场景解决方案,20 + 配方覆盖全需求
mongodb·zookeeper·eureka·spark·rabbitmq·memcached·storm
Aurora_Dawn_yy19 天前
单机部署数据同步_jdk,mysql,kafka,flink,zookeeper,达梦,starrocks
大数据·linux·starrocks·zookeeper·达梦
Jinkxs20 天前
Dubbo- 主流注册中心介绍:Zookeeper/Nacos/Eureka 适配思路
zookeeper·eureka·dubbo
mqiqe20 天前
面试题-Zookeeper 面试篇
分布式·zookeeper·面试
JAVA面经实录91720 天前
ZooKeeper 完整知识体系
java·zookeeper·架构
爱吃牛肉的大老虎20 天前
Kafka集群之抛弃 Zookeeper
分布式·zookeeper·kafka
JAVA面经实录91720 天前
ZooKeeper 面试题完整标准答案(面试背诵版)
分布式·zookeeper·面试
知识分享小能手20 天前
Hadoop学习教程,从入门到精通, ZooKeeper 分布式协调服务 — 全面知识点与案例代码(5)
hadoop·分布式·zookeeper
XWalnut23 天前
Zookeeper入门
分布式·zookeeper
冷色调的咖啡师1 个月前
4.大数据高可用
大数据·linux·hadoop·hdfs·zookeeper·yarn