ZooKeeper
概述
ZooKeeper是一个开源的分布式协调服务。设计目标是将那些复杂的分布式协调过程封装起来,为用户提供一个简单一致的接口。
ZooKeeper 为我们提供了高可用、高性能、稳定的分布式数据一致性解决方案,通常被用于实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。这些功能的实现主要依赖于 ZooKeeper 提供的 数据存储+事件监听 功能。
包括Dubbo、Kafka都用到了ZK。
主要特性
- 顺序一致性: 从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。
- 原子性: 所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。
- 单一系统映像: 无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。
- 可靠性: 一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖。
- 实时性: 每个客户端的系统视图都是最新的。
应用场景
- 配置管理:动态更新和共享配置信息,客户端可以实时获取最新配置。
- 命名服务:为分布式环境中的资源和服务提供全局唯一的ID
- 分布式锁:支持在分布式系统中的各种锁操作,保证了跨进程的同步。
- 集群管理:监控节点的加入和离开,并进行Leader选举。
- 队列管理:支持创建分布式队列和栅栏等同步机制。
工作原理
ZooKeeper集群由一组服务器组成,这些服务器存储整个数据树并响应客户端的读写请求。为了保证高可用性,ZooKeeper使用了一种叫做ZAB(ZooKeeper Atomic Broadcast)的协议来保证集群中所有服务器的数据一致性。
客户端连接到其中一个ZooKeeper服务器,并且可以注册监听某些znode的变化。一旦这些znode发生变化,ZooKeeper就会通知所有注册了监听的客户端。
总结
ZooKeeper是一个为分布式应用提供协调服务的中间件,它解决了分布式系统中常见的一些问题,如命名服务、状态同步、集群管理和配置维护等。通过提供简单的API和一系列的保证,ZooKeeper使得开发分布式应用变得更加容易和可靠。
quick start
解压缩到: apache-zookeeper文件夹
cd apache-zookeeper
vim conf/zoo.cfg:
tickTime=2000
dataDir=/tmp/zookeeper
clientPort=2181bin/zkServer.sh start启动
可以下载可视化管理工具
https://github.com/vran-dev/PrettyZoo/blob/master/README_CN.md