目录
什么是 ZooKeeper
Apache ZooKeeper 是一个开源的分布式协调服务,用于管理分布式系统中的配置信息、命名服务、分布式同步和组服务。它通过一个层次化的命名空间(类似于文件系统)存储数据,称为 ZNode,提供高可靠性和一致性。ZooKeeper 广泛应用于 Hadoop、Kafka 等分布式系统中,用于领导者选举、配置管理和状态同步等场景。
安装 ZooKeeper
以下是在单机上安装 ZooKeeper 的步骤(以 Ubuntu 为例):
步骤
- 安装 Java
ZooKeeper 需要 Java 运行环境 (JVM)。安装 OpenJDK:
sudo apt update
sudo apt install openjdk-11-jdk
java -version # 验证安装
- 下载 ZooKeeper
从 Apache 官网下载最新稳定版(例如 3.8.4):
wget https://downloads.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
tar -xzf apache-zookeeper-3.8.4-bin.tar.gz
cd apache-zookeeper-3.8.4-bin
- 配置 ZooKeeper
复制并编辑配置文件:
cp conf/zoo_sample.cfg conf/zoo.cfg
nano conf/zoo.cfg
默认配置如下:
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
tickTime
:基本时间单位(毫秒)。dataDir
:数据存储目录(需手动创建,例如sudo mkdir /var/lib/zookeeper
)。clientPort
:客户端连接端口。
- 启动 ZooKeeper
bin/zkServer.sh start
检查是否运行:
bin/zkCli.sh -server 127.0.0.1:2181
看到 ZooKeeper
提示符表示成功。
基本操作
使用 ZooKeeper 的命令行客户端(zkCli.sh
)可以执行基本操作。
示例
- 连接客户端
bin/zkCli.sh -server 127.0.0.1:2181
- 创建 ZNode
create /myNode "Hello ZooKeeper"
创建一个路径为 /myNode
的节点,数据为 “Hello ZooKeeper”。
- 获取数据
get /myNode
输出:
Hello ZooKeeper
[元数据信息]
- 修改数据
set /myNode "Updated Data"
- 删除节点
delete /myNode
- 列出节点
ls /
- 注意:ZooKeeper 支持持久节点(默认)和临时节点(
-e
参数),临时节点在客户端断开时自动删除。
使用 ZooKeeper 的 Java 示例
以下是一个使用 Java API 操作 ZooKeeper 的简单示例。
示例代码
- 添加依赖
在 Maven 项目中添加 ZooKeeper 依赖:
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.8.4</version>
</dependency>
- Java 代码
import org.apache.zookeeper.*;
import java.io.IOException;
public class ZooKeeperExample {
private static ZooKeeper zk;
private static final String CONNECT_STRING = "localhost:2181";
private static final int SESSION_TIMEOUT = 30000;
public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
// 连接 ZooKeeper
zk = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, event -> {
System.out.println("收到事件: " + event.getType());
});
// 创建节点
String path = "/testNode";
zk.create(path, "Test Data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("创建节点: " + path);
// 获取数据
byte[] data = zk.getData(path, false, null);
System.out.println("获取数据: " + new String(data));
// 修改数据
zk.setData(path, "Updated Test Data".getBytes(), -1);
System.out.println("更新数据: " + new String(zk.getData(path, false, null)));
// 删除节点
zk.delete(path, -1);
System.out.println("节点已删除");
// 关闭连接
zk.close();
}
}
- 解释:
ZooKeeper
对象:连接到 ZooKeeper 服务。create
:创建持久节点。getData
和setData
:读写数据。delete
:删除节点。
运行此代码需要确保 ZooKeeper 服务已在 localhost:2181
运行。
参考资料
- ZooKeeper 官方文档 – 官方指南和 API 文档。
- ZooKeeper Getting Started – 快速入门。
- Baeldung – ZooKeeper Java API – Java 示例教程。
- Guru99 – ZooKeeper 教程 – 基础概念和安装。
这是 ZooKeeper 的入门教程,涵盖了安装、基本操作和编程示例。如果您需要更深入的内容(例如集群配置或生产环境部署),请告诉我!
发表回复