ZooKeeper 食谱和 Apache Curator

ZooKeeper Recipes and Apache Curator

我正在尝试确切地了解 Apache ZooKeeper ("ZK") 解决了哪些类型的问题,也许他们的 Recipes page 是最好的起点.

首先,我做出以下假设

我相信 Apache Kafka is an example of this, where Kafka uses ZK to create a distributed Queue(这是列出的 ZK 食谱之一)。因此,如果我的假设是正确的,ZK 公开了那些 API 方法,Apache Kafka 的创建者要么直接使用 ZK,要么使用 Curator 来实现 "Queue" ZK Recipe。

如果我上面的任何假设是错误的,请首先纠正我!假设我或多或少走上正轨:

查看 ZK 食谱列表,我看到以下内容(非详尽无遗):

为了让我欣赏这些食谱和它们提供的解决方案,我首先需要欣赏它们解决的问题!我从基本 Java 并发中了解锁是什么,但我只是没有看到何时需要 "distributed Lock" 的用例。对于领先的选举,我能想到的 - 作为 需要 它的用例 - 如果你正在构建一个你想要使用内置的应用程序master/slave 或 primary/secondary 能力。也许在那种情况下,您会使用 ZK 来实现您自己的 "Leader Election" 配方,或者可能只是使用开箱即用的 Curator 的 Leader Latch。至于屏障,我看不出它们与锁有什么不同。所以我问:

  1. 是的。您的 Zk 领导者选举配方示例是正确的。一般来说,如果食谱已经存在,为什么要重写它?

引用 Zookeeper 文档:

ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.

  1. 关于分布式锁 - 假设你有一个分布式系统,其中所有配置都保存在 Zookeeper 上,并且不止一个实体负责更新某个配置 - 在这种情况下你会想要配置更新是同步的。

  2. 关于屏障,我个人从来没有使用过它们——但是有了锁,你需要获取锁才能在节点上实际做一些事情,一个屏障,你等到它空闲了,但不一定需要设置障碍一旦它是免费的。