我试图了解ZooKeeper,它是如何工作的,它是做什么的。有没有什么应用程序可以与ZooKeeper相媲美?

如果你知道,那么你会如何向外行描述ZooKeeper ?

我试过apache wiki, zookeeper sourceforge…但我还是无法与之产生共鸣。

我刚刚浏览了http://zookeeper.sourceforge.net/index.sf.shtml,难道没有更多这样的服务吗?它是否像复制服务器服务那样简单?


当前回答

Zookeeper是最好的开源服务器和服务之一,它有助于可靠地协调分布式进程。Zookeeper是一个CP系统(参考CAP定理),提供一致性和分区容忍。在所有节点上复制Zookeeper状态使其最终成为一致的分布式服务。

此外,任何新当选的领导人都会更新其追随者丢失的提案,或者在追随者丢失了许多提案时,更新国家的快照。

Zookeeper还提供了一个非常易于使用的API。这篇博客,Zookeeper Java API的例子,有一些例子,如果你正在寻找例子。

那么我们在哪里使用它呢?如果你的分布式服务需要一个集中的,可靠的和一致的配置管理,锁,队列等,你会发现Zookeeper是一个可靠的选择。

其他回答

Apache ZooKeeper是一种开源技术,用于协调和管理分布式应用程序中的配置。它简化了维护配置细节、启用分布式同步和管理命名注册中心等任务。

它的名字很贴切——想想一个动物园管理员是如何四处走动,照顾所有的动物,维护它们的围栏,喂它们等等。

Apache ZooKeeper可以与Apache Pinot或Apache Flink等Apache项目一起使用。Apache Kafka还使用ZooKeeper来管理代理、主题和分区信息。由于Apache ZooKeeper是开源的,你可以将它与任何你选择的技术/项目配对,而不仅仅是Apache Foundation项目。

我理解zookeeper的方法是,摆弄CLI客户端。如入门指南和命令行界面所述

从这里我了解到zookeeper的表面看起来非常类似于文件系统,客户端可以创建和删除对象,读取或写入数据。

CLI命令示例

create /myfirstnode mydata
ls /
get /myfirstnode
delete /myfirstnode

试着自己

如何在windows, linux或mac的docker上在几分钟内启动一个zookeeper环境:

一次设置:

docker network create dn

在终端窗口运行服务器:

docker run --network dn --name zook -d zookeeper
docker logs -f zookeeper

在第二个终端窗口中运行客户端:

docker run -it --rm --network dn zookeeper zkCli.sh -server zook

参见dockerhub上的image文档

我建议使用以下资源:

论文:https://pdos.csail.mit.edu/6.824/papers/zookeeper.pdf 由MIT 6.824提供的讲座从36:00开始:https://youtu.be/pbmyrNjzdDk?t=2198

我建议先看视频,读一读报纸,然后再看一遍。如果您事先了解Raft,就会更容易理解。

Zookeeper是最好的开源服务器和服务之一,它有助于可靠地协调分布式进程。Zookeeper是一个CP系统(参考CAP定理),提供一致性和分区容忍。在所有节点上复制Zookeeper状态使其最终成为一致的分布式服务。

此外,任何新当选的领导人都会更新其追随者丢失的提案,或者在追随者丢失了许多提案时,更新国家的快照。

Zookeeper还提供了一个非常易于使用的API。这篇博客,Zookeeper Java API的例子,有一些例子,如果你正在寻找例子。

那么我们在哪里使用它呢?如果你的分布式服务需要一个集中的,可靠的和一致的配置管理,锁,队列等,你会发现Zookeeper是一个可靠的选择。

我大致理解ZooKeeper,但对“quorum”和“split brain”这两个术语有问题,所以也许我可以和你分享我的发现(我认为自己也是一个外行)。

假设我们有一个5台服务器的ZooKeeper集群。其中一个服务器将成为领导者,其他服务器将成为追随者。

These 5 servers form a quorum. Quorum simply means "these servers can vote upon who should be the leader". So the voting is based on majority. Majority simply means "more than half" so more than half of the number of servers must agree for a specific server to become the leader. So there is this bad thing that may happen called "split brain". A split brain is simply this, as far as I understand: The cluster of 5 servers splits into two parts, or let's call it "server teams", with maybe one part of 2 and the other of 3 servers. This is really a bad situation as if both "server teams" must execute a specific order how would you decide wich team should be preferred? They might have received different information from the clients. So it is really important to know what "server team" is still relevant and which one can/should be ignored. Majority is also the reason you should use an odd number of servers. If you have 4 servers and a split brain where 2 servers seperate then both "server teams" could say "hey, we want to decide who is the leader!" but how should you decide which 2 servers you should choose? With 5 servers it's simple: The server team with 3 servers has the majority and is allowed to select the new leader. Even if you just have 3 servers and one of them fails the other 2 still form the majority and can agree that one of them will become the new leader.

我意识到一旦你思考了一段时间,理解了这些术语,它就不再那么复杂了。我希望这也能帮助大家理解这些术语。