1. 什么是 ZooKeeper


  • 简介:Apache ZooKeeper 是一种用于分布式应用程序的高性能协调服务,提供一种集中式信息存储服务。
  • 特点:数据存储在内存中,类文件系统的树形结构(文件和目录),高吞吐量和低延迟,集群高可靠。
  • 作用:基于 ZooKeeper可以实现分布式统一配置中心、服务注册中心,分布式锁等功能。

image.png

何为分布式协调服务

  • 单机系统因处理能力上限、可用性、可靠性的考虑,变成分布式系统。
  • 原来在单机进程中完成一件事的多个步骤,变为在多个计算机中执行,这时就需要协调多个计算机节点做事的顺序,原来在单系统中资源竞争通过锁进行同步控制,现在变为多个计算机上的进程间资源竞争,也需要分布式协调。
  • 我们可以把每个分布式系统中需要的协调管理的公共基础部分抽取出来作为一个基础公共服务供大家使用,这就是分布式协调服务。

    应用案例

  • Hbase:使用 ZooKeeper 进行 master 选举、服务间协调。

  • Solr:使用 ZooKeeper 进行集群管理、Leader 选举、配置管理。
  • dubbo:服务注册。
  • Mycat:集群管理、配置管理。
  • Sharding-JDBC:集群管理、配置管理。

    同类产品

  • consul、etcd、Doozer

    2. 单机版安装



指令 描述
ls 获取子节点。
create 在 ZooKeeper 中的某个位置创建一个节点。
delete 删除节点。
exists 测试节点是否存在。
get data 从指定节点读取数据。
set data 将数据存入指定节点。
get children c查询指定节点之下所有的子节点。
sync 等待数据进行同步。

4. Java API


  • org.apache.zookeeper
  • org.apache.zookeeper.data
  • 创建客户端的核心类:Zookeeper | 方法 | 描述 | | —- | —- | | connect | 连接到 ZooKeeper 集合 | | create | 创建 znode | | exists | 检查 znode 是否存在及其信息 | | get data | 从特定的 znode 获取数据 | | set data | 在特定的 znode 中设置数据 | | get children | 获取特定的 znode 中的所有子节点 | | delete | 删除指定的 znode 及其所有子项 | | close | 关闭连接 |

5. 第三方客户端


  • zkClient

    1. <dependency>
    2. <groupId>com.101tec</groupId>
    3. <artifactId>zkclient</artifactId>
    4. <version>0.11</version>
    5. </dependency>
  • curator