# 什么Zookeeper

> 什么是分布式系统？
>
> * 很多台计算机组成一个整体，一个整体一致对外并且处理同一请求
> * 内部的每台计算机偶可以相互通信（rest/rpc）
> * 客户端到服务端的一次请求到响应结束会历经多台计算机

Zookeeper是一个分布式开源框架，提供了协调分布式应用的基本服务，它向外部应用暴露一组通用服务——分布式同步（Distributed Synchronization）、命名服务（Naming Service）、集群维护（Group Maintenance）等，简化分布式应用协调及其管理的难度，提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行，不过它的长处在于通过分布式ZooKeeper集群（一个Leader，多个Follower），基于一定的策略来保证ZooKeeper集群的稳定性和可用性，从而实现分布式应用的可靠性。

* 1、zookeeper是为别的分布式程序服务的
* 2、Zookeeper本身就是一个分布式程序（只要有半数以上节点存活，zk就能正常服务）
* 3、Zookeeper所提供的服务涵盖：主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务等
* 4、虽然说可以提供各种服务，但是zookeeper在底层其实只提供了两个功能：
  * 管理(存储，读取)用户程序提交的数据（类似namenode中存放的metadata）；&#x20;
  * 并为用户程序提供数据节点监听服务；

## Zookeeper集群机制

Zookeeper集群的角色： Leader 和 follower

只要集群中有半数以上节点存活，集群就能提供服务

## Zookeeper特性

* 1、Zookeeper：一个leader，多个follower组成的集群
* 2、全局数据**一致性**：每个server保存一份相同的数据副本，client无论连接到哪个server，数据都是一致的
* 3、分布式读写，更新请求转发，由leader实施
* 4、更新请求顺序进行，来自同一个client的更新请求按其发送**顺序依次执行**
* 5、数据更新**原子性**，一次数据更新要么成功，要么失败
* 6、**实时性**，在一定时间范围内，client能读到最新数据

## Zookeeper数据结构

* 1、层次化的目录结构，命名符合常规文件系统规范(类似文件系统）&#x20;

![](/files/-LfnTMRb8Vn24uIRH-x1)

* 2、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
* 3、节点Znode可以包含数据和子节点（但是EPHEMERAL类型的节点不能有子节点）

节点类型

> a、Znode有两种类型：
>
> 短暂（ephemeral）（create -e /app1/test1 “test1” 客户端断开连接zk删除ephemeral类型节点）
>
> 持久（persistent） （create -s /app1/test2 “test2” 客户端断开连接zk不删除persistent类型节点）
>
> b、Znode有四种形式的目录节点（默认是persistent ）
>
> PERSISTENT
>
> PERSISTENT\_SEQUENTIAL（持久序列/test0000000019 ）
>
> EPHEMERAL
>
> EPHEMERAL\_SEQUENTIAL
>
> c、创建znode时设置顺序标识，znode名称后会附加一个值，顺序号是一个单调递增的计数器，由父节点维护
>
> ![](/files/-LfnTMRdo4vu5c08UdHs)
>
> d、在分布式系统中，顺序号可以被用于为所有的事件进行全局排序，这样客户端可以通过顺序号推断事件的顺序


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://xiaoxiami.gitbook.io/zookeeper/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
