前面一篇文章简单介绍了一下Dubbo的使用方式:SpringBoot如何使用Dubbo(直连模式)
这篇文章继续介绍一下Zookeeper。
1.Zookeeper介绍
ZooKeeper 是Apache 旗下的开源分布式协调服务,主要用于解决大型分布式系统中的数据一致性和协同管理问题 。它通过简单的接口和类似文件系统的树状结构,帮助分布式进程实现高效同步。
如果用生活中的例子来描述:
服务提供者(Provider) = 餐厅后厨 后厨拥有做菜的能力(具体服务),可以接受订单、做出菜品并返回结果。
服务消费者(Consumer) = 顾客 顾客想吃饭(发起调用),但他并不直接知道哪家餐厅能做、地址在哪,也不负责和后厨直接通信。
ZooKeeper = 外卖平台的“餐厅目录”(只存信息,不派单) 所有营业的餐厅会把自己的位置、菜系、联系方式等信息在目录上登记。目录实时更新:新餐厅开业就加,打烊或关店就删除。顾客或送餐员可以随时查询“谁会做宫保鸡丁”。
Dubbo = 外卖骑手 + 配送规则 骑手负责从顾客那里取订单,按照事先定好的规则(例如选最近的餐厅、如果一家忙就换另一家、失败后重试等),把请求送到选定的餐厅后厨,再把做好的菜送回给顾客。整个过程对顾客透明——顾客只知道自己点了菜、菜送到了。
上面的例子,用一个流程串起来:
(1)服务注册 川菜馆后厨(Provider)启动营业时,向外卖平台的餐厅目录(ZooKeeper)登记:“我擅长川菜,地址在中山路123号,当前空闲”。
(2)服务发现 顾客(Consumer)想吃“宫保鸡丁”。他打开手机App,App向目录(ZooKeeper)询问:“哪家餐厅能做川菜且正在营业?” ZooKeeper 返回一个列表:[川菜馆A,地址…;川菜馆B,地址…]。
(3)负载均衡与调用 顾客App里的Dubbo骑手拿到列表后,按照策略(比如轮询、随机或最短响应时间)从列表里选一家,比如川菜馆A。 Dubbo骑手把“一份宫保鸡丁”的请求通过网络发送到川菜馆A的具体地址。 后厨做菜,返回结果。
(4)动态感知 如果川菜馆A突然停电(服务下线),ZooKeeper的目录会立刻更新,移除该餐厅。 下一次顾客点菜时,Dubbo骑手将只能拿到剩下的可用餐厅列表,不会再去联系停电的餐厅。

2.同类产品
| Apache ZooKeeper | 经典分布式协调中间件,可做服务注册发现、配置管理、分布式锁、集群选主,Dubbo 经典注册中心 | 1. 成熟稳定,生态完善,兼容 Dubbo、Kafka、Hadoop2. ZAB 协议强一致性,数据可靠3. 树形 ZNode 节点,支持临时/顺序节点,适配服务监听、分布式锁4. 会话机制完善,自动清理下线服务节点 | 1. 并发性能一般,QPS 不高2. 集群不宜过多节点,扩容和选举效率差3. 仅基础协调能力,无自带健康检查、服务治理4. 运维复杂,部署排查难度大 | Dubbo 注册中心、大数据集群协调、分布式锁、主从选举、强一致配置管理 |
| etcd | 基于 Raft 的分布式键值存储,云原生标配,用于配置存储、服务发现 | 1. Raft 协议线性强一致性2. 读写性能远超 Zookeeper,并发能力强3. 适配 K8s 生态,容器化部署简单4. 支持 Watch、原子操作,适合配置和服务监听 | 1. 扁平化 KV 结构,无树形层级,复杂结构不如 ZK 灵活2. 写请求必须走 Leader,高并发写入有瓶颈3. 偏向云原生,传统 Dubbo、大数据生态集成一般 | K8s 集群配置、云原生微服务、容器化服务注册发现、分布式配置中心 |
| Consul | 自带服务发现、配置、健康检查、多数据中心的服务治理组件 | 1. 内置健康检查、DNS 访问、KV 配置,功能齐全2. 原生支持多数据中心、跨地域部署3. 多协议兼容,跨语言友好4. 自带 UI 和完善运维工具 | 1. 功能太重,架构复杂,学习运维成本高2. 高并发性能不如 Nacos、etcd3. 资源占用高4. 国内生态和中文文档较弱 | 跨多机房微服务、跨语言分布式系统、需要自带完整服务治理的项目 |
| Nacos | 阿里开源,一站式服务注册发现+配置中心,Dubbo、Spring Cloud 主流选型 | 1. 集注册中心+配置中心一体,开箱即用2. AP/CP 双模式可切换,灵活适配业务3. 高并发高性能,支持大规模微服务实例4. 中文生态完善,文档友好,运维简单5. 原生多租户、多环境、灰度配置 | 1. 集群架构复杂,大规模运维有门槛2. CP 强一致模式下性能下降3. 占用内存偏高4. 部分高级功能学习成本高 | 国内微服务、Dubbo/Spring Cloud 项目、中小企业一站式服务治理、动态配置中心 |
| Eureka | Spring Cloud 原生注册中心,纯 AP 设计,简单轻量 | 1. 无主从去中心化,部署极简,上手容易2. 优先保证可用性,网络抖动不崩服务3. 自带自我保护,避免误删服务实例4. 和 Spring Cloud 完美适配 | 1. 只做注册发现,无配置管理、服务治理2. 最终一致性,数据同步延迟大3. 官方已停止迭代,逐渐淘汰4. 不适合超大规模微服务集群 | 中小型 Spring Cloud 项目、老旧存量微服务、对一致性要求不高的业务 |
传统 Java 生态 / 强一致性协调场景:优先选 ZooKeeper,成熟稳定,与 Dubbo、Kafka 等框架无缝适配; 云原生 / Kubernetes 生态:优先选 etcd,是该场景的事实标准,部署运维成本低,性能优异; 跨地域 / 多数据中心架构:优先选 Consul,原生多数据中心支持,全链路服务治理能力完善; 国内企业级微服务 / 一体化治理:优先选 Nacos,中文生态友好,功能全面,适配国内主流技术栈; 中小规模简单微服务 / 快速落地:优先选 Eureka,架构简单,上手成本极低,适合快速验证业务。
3.Zookeeper下载
Zookeeper官网:https://zookeeper.apache.org/

下载地址:https://zookeeper.apache.org/releases.html
根据下图,点击“Apache Zookeeper 3.9.5”
然后,在弹出的页面,点击下面的链接,进行下载。
也可以点击下面的链接进行下载:apache-zookeeper-3.9.5-bin.tar.gz链接: https://pan.baidu.com/s/1kkdtaW3zy4tiNVTVWkdHCQ?pwd=csgf
4.安装使用
上面的压缩宝下载后进行解压: 
进到目录中,可以看到下面的文件夹 
然后在此处新建两个文件夹data、log,然后复制一下地址栏这个地址,一会要使用。 
进到conf文件夹,然后复制一份 zoo_sample.cfg,然后把它重命名为zoo.cfg
使用编辑器打开zoo.cfg文件
然后,参考下面的配置,新增一个配置:
dataDir=D:\\Software\\zookeeper\\apache-zookeeper-3.9.5-bin\\apache-zookeeper-3.9.5-bin\\data
然后再新增一个log的配置
然后,保存,退出zoo.cfg文件。
再然后,后退,进入到bin目录,双击“zkServer.cmd” 
然后看到下面界面,表示成功。
怎么看是否成功:
[myid:] – INFO [main:o.a.z.s.NIOServerCnxnFactory@660] – binding to port 0.0.0.0/0.0.0.0:2181
表示:2181 端口绑定成功 → ZK 服务正在监听连接
[myid:] – INFO [main:o.a.z.s.ZKDatabase@137] – zookeeper.snapshotSizeFactor = 0.33
数据加载完成
[myid:] – INFO [main:o.a.z.a.ZKAuditProvider@42] – ZooKeeper audit is disabled.
最后一行正常结束 → 启动流程全部完成




