跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Zookeeper
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{Infobox software | name = Zookeeper | logo = | developer = Apache软件基金会 | released = {{Start date|2008|11}} | latest_release_version = 3.8.3 | latest_release_date = {{Release date|2023|10|16}} | programming_language = Java | operating_system = 跨平台 | genre = 分布式协调服务 | license = Apache许可证2.0 | website = {{URL|https://zookeeper.apache.org/}} }} '''Apache ZooKeeper'''是一个开源的[[分布式系统]]协调服务,由[[Apache软件基金会]]开发维护。它提供了一个简单而健壮的接口,用于处理分布式环境中的配置管理、命名服务、分布式同步和组服务等常见问题。 == 概述 == ZooKeeper最初是作为[[Hadoop]]的一个子项目开发的,后来成为一个独立的顶级项目。它的设计目标是提供一个简单而可靠的分布式协调服务,帮助开发人员处理分布式系统中的一致性问题。 ZooKeeper的核心是一个分布式的、分层的键值存储,它使用类似于文件系统目录树的结构来组织数据。这些数据被保存在内存中,以实现高性能的读写操作。 == 核心概念 == === 数据模型 === ZooKeeper的数据模型类似于一个文件系统,由称为"znode"的节点组成。每个znode可以存储少量数据(默认最大1MB),并且可以有子节点。 === 节点类型 === ZooKeeper支持几种不同类型的节点: * '''持久节点(Persistent)''' - 创建后一直存在,直到显式删除 * '''临时节点(Ephemeral)''' - 仅在创建它的会话期间存在 * '''顺序节点(Sequential)''' - 节点名称会自动附加一个单调递增的数字 === 监视机制 === ZooKeeper提供了监视(watch)机制,客户端可以在znode上设置监视点,当znode发生变化时会收到通知。 == 架构 == ZooKeeper通常以集群模式运行,称为"ensemble"。一个ZooKeeper集群由多个服务器组成,其中一个是领导者(leader),其他是追随者(follower)。 <mermaid> graph TD A[Client] --> B[ZooKeeper Ensemble] B --> C[Leader] B --> D[Follower] B --> E[Follower] C --> F[ZooKeeper Database] D --> F E --> F </mermaid> == 使用示例 == === Java客户端示例 === 以下是一个使用ZooKeeper Java API创建节点和设置监视的简单示例: <syntaxhighlight lang="java"> import org.apache.zookeeper.*; public class ZKExample implements Watcher { private static final String ZK_ADDRESS = "localhost:2181"; private static final int SESSION_TIMEOUT = 3000; private ZooKeeper zooKeeper; public static void main(String[] args) throws Exception { ZKExample example = new ZKExample(); example.connectToZookeeper(); example.createNode("/example", "test data".getBytes()); example.watchNode("/example"); example.run(); example.close(); } public void connectToZookeeper() throws Exception { this.zooKeeper = new ZooKeeper(ZK_ADDRESS, SESSION_TIMEOUT, this); } public void createNode(String path, byte[] data) throws Exception { zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } public void watchNode(String path) throws Exception { zooKeeper.exists(path, this); } @Override public void process(WatchedEvent event) { System.out.println("Received event: " + event); } public void run() throws InterruptedException { synchronized (zooKeeper) { zooKeeper.wait(); } } public void close() throws InterruptedException { zooKeeper.close(); } } </syntaxhighlight> == 实际应用 == ZooKeeper被广泛应用于各种分布式系统中,包括: * [[Kafka]] - 使用ZooKeeper进行broker协调和主题配置管理 * [[HBase]] - 使用ZooKeeper进行主节点选举和服务器状态跟踪 * [[Solr]] - 使用ZooKeeper进行集群配置和协调 * [[Dubbo]] - 使用ZooKeeper作为服务注册中心 == 性能优化 == 为了获得最佳性能,建议: * 保持znode数据量小(理想情况下小于1KB) * 合理设置会话超时时间 * 避免频繁的写操作 * 在集群中部署奇数个服务器(3、5或7个) == 与其他技术的比较 == {| class="wikitable" |- ! 特性 !! ZooKeeper !! etcd !! Consul |- | 一致性算法 || ZAB || Raft || Raft |- | 数据模型 || 层次化键值 || 扁平键值 || 层次化键值 |- | 服务发现 || 支持 || 支持 || 原生支持 |- | 健康检查 || 有限支持 || 不支持 || 原生支持 |} == 版本历史 == ZooKeeper的主要版本包括: * 3.4.0 (2010年) - 第一个稳定版本 * 3.5.0 (2016年) - 引入动态重新配置 * 3.6.0 (2020年) - 改进的TLS支持和性能优化 * 3.7.0 (2021年) - 增强的观察者角色和改进的领导者选举 == 参见 == * [[分布式系统]] * [[一致性协议]] * [[服务发现]] * [[配置管理]] == 参考资料 == {{Reflist}} [[Category:分布式系统]] [[Category:中间件]] [[Category:Apache软件基金会项目]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:Infobox
(
编辑
)
模板:Infobox software
(
编辑
)
模板:Infobox software/simple
(
编辑
)
模板:Main other
(
编辑
)
模板:Plainlist
(
编辑
)
模板:Plainlist/styles.css
(
编辑
)
模板:Reflist
(
编辑
)
模板:Reflist/styles.css
(
编辑
)
模板:Release date
(
编辑
)
模板:Start date
(
编辑
)
模板:Template link expanded
(
编辑
)
模板:Template other
(
编辑
)
模板:Tlx
(
编辑
)
模板:URL
(
编辑
)
模板:Wikidata
(
编辑
)
模块:Arguments
(
编辑
)
模块:Check for unknown parameters
(
编辑
)
模块:Date time
(
编辑
)
模块:Infobox
(
编辑
)
模块:Infobox/styles.css
(
编辑
)
模块:InfoboxImage
(
编辑
)
模块:Template link general
(
编辑
)
模块:URL
(
编辑
)
模块:Wd
(
编辑
)