java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > ZooKeeper原理

关于ZooKeeper原理剖析

作者:Hello.Reader

ZooKeeper是一种分布式、高可用性的协调服务,主要用于帮助系统避免单点故障和建立可靠的应用程序,它通过Leader、Follower和Observer的角色来协调节点,并提供分布式协作服务和维护配置信息,ZooKeeper在HDFS、YARN、HBase、SmallFS和Kafka等大数据产品中都有广泛的应用

1. ZooKeeper简介

ZooKeeper是一个分布式、高可用性的协调服务。在大数据产品中主要提供两个功能:

2. ZooKeeper结构

ZooKeeper集群中的节点分为三种角色:Leader、Follower和Observer,其结构和相互关系如下图所示。通常来说,需要在集群中配置奇数个(2N+1)ZooKeeper服务,至少(N+1)个投票才能成功的执行写操作。

ZooKeeper结构

上图中各部分的功能说明如下表所示。

名称描述
Leader在ZooKeeper集群中只有一个节点作为集群的领导者,由各Follower通过ZooKeeper Atomic Broadcast(ZAB)协议选举产生,主要负责接收和协调所有写请求,并把写入的信息同步到Follower和Observer。
FollowerFollower的功能有两个:1.每个Follower都作为Leader的储备,当Leader故障时重新选举Leader,避免单点故障。2.处理读请求,并配合Leader一起进行写请求处理。
ObserverObserver不参与选举和写请求的投票,只负责处理读请求、并向Leader转发写请求,避免系统处理能力浪费。
ClientZooKeeper集群的客户端,对ZooKeeper集群进行读写操作。例如HBase可以作为ZooKeeper集群的客户端,利用ZooKeeper集群的仲裁功能,控制其HMaster的“Active”和“Standby”状态。

如果集群启用了安全服务,在连接ZooKeeper时需要进行身份认证,认证方式有以下两种:

注意:

3. ZooKeeper原理

写请求

只读请求

4. ZooKeeper和HDFS的关系

ZooKeeper与HDFS的关系如下图所示。

ZKFC(ZKFailoverController)作为一个ZooKeeper集群的客户端,用来监控NameNode的状态信息。ZKFC进程仅在部署了NameNode的节点中存在。HDFS NameNode的Active和Standby节点均部署有zkfc进程。

5. ZooKeeper和YARN的关系

ZooKeeper与YARN的关系如下图所示。

6. ZooKeeper和HBase的关系

ZooKeeper与HBase的关系如下图所示。

7. Zookeeper和SmallFS的配合关系

FGCService的部署模式为HA模式。HA(High Availability)模式目的是防止单节点故障导致服务不可用。为了支持HA模式,FGCService依赖于ZooKeeper。

8. ZooKeeper和Kafka的配合关系

ZooKeeper与Kafka的关系如下图 ZooKeeper和Kafka的关系所示。

Broker端使用ZooKeeper用来注册broker信息,并进行partition leader选举Consumer端使用ZooKeeper用来注册consumer信息,其中包括consumer·消费的partition列表等,同时也用来发现broker列表,并和partition leader建立socket连接,并获取消息。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文