一、安装
zookeeper 下载地址为: https://zookeeper.apache.org/releases.html
本例使用版本 zookeeper-3.4.14
1、查看 conf 目录下是否存在 zoo.cfg ,没有时将 zoo_sample.cfg 文件,复制一份,重命名为 zoo.cfg:
2、在安装目录下面新建一个空的 data 文件夹和 log 文件夹:
3、修改 zoo.cfg 配置文件,将 dataDir=/tmp/zookeeper 修改成 zookeeper 安装目录所在的 data 文件夹,再添加一条添加数据日志的配置(需要根据自己的安装路径修改)。
4、双击 bin目录下zkServer.cmd 启动程序:控制台显示 bind to port 0.0.0.0/0.0.0.0:2181,表示服务端启动成功!
5、双击 bin目录下zkCli.cmd 启动客户端
二、 Java连接测试
使用的 IDE 为 IntelliJ IDEA,创建一个 maven 工程,命名为 zookeeper-demo,并且引入如下依赖,可以自行在maven中央仓库选择合适的版本,介绍原生 API 和 Curator 两种方式。
1、依赖
1 | <dependency> |
2、客户端的 zookeeper 原生 API
1 | public class ConnectionDemo { |
控制台输出 connected 显示连接成功!
log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
CONNECTED
Process finished with exit code 0
简单示例添加节点 API,将上述代码中
zooKeeper.create(“/runoob”,”0”.getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
注释打开执行,同时在服务端终端执行命令,显示设置成功。
[zk: localhost:2181(CONNECTED) 1] get /runoob
0
cZxid = 0x69
ctime = Fri Oct 16 15:51:26 GMT+08:00 2020
mZxid = 0x69
mtime = Fri Oct 16 15:51:26 GMT+08:00 2020
pZxid = 0x69
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0
[zk: localhost:2181(CONNECTED) 2]
3、客户端的curator连接
Curator 是 Netflix 公司开源的一套 zookeeper 客户端框架,解决了很多 Zookeeper 客户端非常底层的细节开发工作,包括连接重连、反复注册 Watcher 和 NodeExistsException 异常等。
Curator 包含了几个包:
curator-framework:对 zookeeper 的底层 api 的一些封装。
curator-client:提供一些客户端的操作,例如重试策略等。
curator-recipes:封装了一些高级特性,如:Cache 事件监听、选举、分布式锁、分布式计数器、分布式 Barrier 等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public class CuratorDemo {
public static void main(String[] args) throws Exception {
CuratorFramework curatorFramework= CuratorFrameworkFactory.
builder().connectString("127.0.0.1:2181").
sessionTimeoutMs(4000).retryPolicy(new
ExponentialBackoffRetry(1000,3)).
namespace("").build();
curatorFramework.start();
Stat stat=new Stat();
//查询节点数据
byte[] bytes = curatorFramework.getData().storingStatIn(stat).forPath("/runoob");
System.out.println(new String(bytes));
curatorFramework.close();
}
}
上一步设置了 /runoob 节点值,所以控制台输出。
log4j:WARN No appenders could be found for logger (org.apache.curator.utils.Compatibility).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
0
Process finished with exit code 0