Zookeeper的实际应用场景是什么?

122

最近我一直在研究Zookeeper,想知道是否有人正在使用它,以及他们具体用它来存储什么。

最常见的用例是用于配置信息,但您存储了哪种类型和多少数据呢?


3
它属于Hadoop技术组的范畴,在这里有来自雅虎的一个不错的应用案例 - http://developer.yahoo.net/blogs/hadoop/2009/05/using_zookeeper_to_tame_system.html - Jonathan Holloway
我不知道它的具体用法,但我知道最新版本的HBase(一个开源的BigTable实现)使用了ZooKeeper。 - Leo P
10
这个问题的赞数比所有答案加起来还多。Zookeeper需要一个更好的用例维基。 - mixdev
1
看看 Netflix 如何使用它。https://github.com/Netflix/curator/wiki/Recipes Curator 是 Netflix 对 ZK 的封装库。 - eSniff
请查看此文章:https://www.stackextend.com/zookeeper/centralized-configuration-with-apache-zookeeper/ - Mouad EL Fakir
13个回答

19

你认为Apache Zookeeper可以用作执行共识的外部系统,就像以下问题中所解释的那样吗?https://stackoverflow.com/q/70088996/5029509 - Questioner

17

1
链接已损坏。 - James Wierzba
https://web.archive.org/web/20181108081130/http://blog.cloudera.com/blog/2009/05/building-a-distributed-concurrent-queue-with-apache-zookeeper/ - hlovdal

14

虽然这是一个老问题,但由于此页面在谷歌搜索中排名第一,涉及到zookeeper使用案例,我认为最好提供一个更新的清单

  1. 维基百科
  2. Zookeeper文档
  3. 真实用户

1
"真实用户"链接已经不存在了 :( - ginna

13

Apache CXF实现的DOSGi使用Zookeeper作为其服务注册库。每个容器都有一个分布式软件(DSW)捆绑包,用于侦听所有服务事件,并在服务状态发生更改时处理具有指示分发的属性的服务。DSW与发现捆绑包进行通信,在参考实现中,发现捆绑包使用Zookeeper将服务存储为临时节点。其他实例将查找节点结构的更改并在其本地系统上注册代理。最终结果是您可以编写普通的OSGi代码,并获得透明的分发。


10

Norbert 是一个可扩展的生产系统的良好示例。一般来说,它将Netty、Protocol Buffers和Zookeeper集成到一个轻量级框架中,用于运行集群服务。使用 Protocol Buffers 指定服务 API,Netty 实现传输层抽象和 Zookeeper 是一个容错的发现服务。

每次启动服务实例时,Norbert 将其注册为特定服务类型的可用实例。从实现角度来看,它创建了两个 Zookeeper 树:

  • “/ServiceName/members”,列出了服务的所有已知实例
  • “/ServiceName/available”,列出了当前可用的服务实例

每个节点最重要的属性是用于连接到相应服务实例的 URL。它实现了客户端负载平衡 - Norbert 客户端找到给定服务名称的 URL 列表,并尝试按某种顺序(例如循环或随机)连接其中一个 URL。


6

有一篇很好的文章《ZooKeeper - 协调之王》介绍了Elastic Cloud上的ZooKeeper。

例如,在Found中,我们广泛使用ZooKeeper进行发现、资源分配、领导者选举和高优先级通知。在本文中,我们将向您介绍这位协调之王,并仔细研究我们如何在Found中使用ZooKeeper。


5
Solr也在努力整合ZooKeeper。在这里,您可以看到它们用于动态配置、分片、消除SPOF(主/从选举)、重新平衡等。

3
  • Storm被许多公司使用(Twitter和Groupon是其中较为知名的两个),并且依赖于Zookeeper。
  • Kafka被Linkedin使用,并且依赖于Zookeeper。

Storm使用Zookeeper存储所有状态,以便在其(分布式)组件服务中任何一个发生故障时,都可以从故障中恢复。

这使得组件服务可以保持无状态,只需在需要配置数据时下载或与Zookeeper服务器同步。如果您曾经需要恢复生产服务器,您就会知道这有多麻烦!

Kafka队列消费者可以使用Zookeeper存储关于已从队列中消费了什么信息(高水位标记)。


2

在我的情况下,我们将配置文件存储在zookeeper集合中,以供群集使用。 我们使用领导者-追随者模式。因此,当一个zookeeper停机时,我们会切换到另一个(复制模式)。


2

那个链接无法使用。 - Viren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接