写点什么

ZooKeeper 应用案例

  • 2022-10-22
    北京
  • 本文字数:1283 字

    阅读完需:约 4 分钟

ZooKeeper应用案例

使用 ZooKeeper 解决常见的分布式问题,包括 leader 选举、分布式队列、负载均衡等。

1、leader 选举

基于 ZooKeeper 实现 leader 选举的基本思想是,让各个参与竞选的实例同时在 ZooKeepeer 上创建指定的 znode,比如/current/leader,谁创建成功则谁竞选成功,并将自己的信息(host、port 等)写入该 znode 数据域,之后其他竞选者向该 znode 注册 watcher,以便当前 leader 出现故障时,第一时间再次参与竞选,具体如下图所示。

基于 ZooKeeper 的 leader 选举流程如下:

1)各实例启动后,尝试在 ZooKeeper 上创建 ephemeral 类型 znode 节点/current/leader,假设实例 B 创建成功,则将自己的信息写入该 znode,并将自己的角色标注为 leader,开始执行 leader 相关的初始化工作。


2)除 B 之外的实例得知创建 znode 失败,则向/current/ leader 注册 watcher,并将自己角色标注为 follower,开始执行 follower 相关的初始化工作。


3)系统正常运行,直到实例 B 因故障退出,此时 znode 节点/current/leader 被 ZooKeeper 删除,其他 follower 收到节点被删除的事情,重新转入步骤 1,开始新一轮的 leader 选举。


在 Hadoop 生态系统中,HBase、YARN 和 HDFS 等系统,采用了类似的机制解决 leader 选举问题。

2、分布式队列

在分布式计算系统中,常见的做法是,用户将作业提交给系统的 Master,并由 Master 将之分解成子任务后,调度给各个 Worker 执行。该方法存在一个问题:Master 维护了所有作业和 Worker 信息,一旦 Master 出现故障,则整个集群不可用。为了避免 Master 维护过多状态,一种改进方式是将所有信息保存到 ZooKeeper 上,进而让 Master 变得无状态,这使得 leader 选举过程更加容易,典型架构如下图所示。

该方案的关键是借助 ZooKeeper 实现一个分布式队列,并借助 ZooKeeper 自带的特性,维护作业提交顺序、作业优先级、各节点(Worker)负载情况等。借助 ZooKeeper 的 PersistentSequentialZnode 自动编号特性,可轻易实现一个简易的 FIFO(First In First Out)队列,在这个队列中,编号小的作业总是先于编号大的作业提交。


Hadoop 生态系统中 Storm 便借助 ZooKeeper 实现了分布式队列,以可靠地保存拓扑信息和任务调度信息。

3、负载均衡

分布式系统很容易通过 ZooKeeper 实现负载均衡,典型的应用场景是分布式消息队列,下图描述了 Kafka 是如何通过 ZooKeeper 解决负载均衡和服务发现问题的。在 Kafka 中,各个 Broker 和 Consumer 均会向 ZooKeeper 注册,保存自己的相关信息,组件之间可动态获取对方的信息。

Broker 和 Consumer 主要在 ZooKeeper 中写入以下信息:

  • Broker 节点注册信息:记录在 ephemeral 类型的 znode 路径/brokers/ids/[0...N]([0… N]是指 0 到 N 之间的某个数)下,保存了该 Broker 所在 host 以及对外开放的端口号。

  • Consumer 注册信息:记录在 ephemeral 类型 znode 路径/consumers/[group_id]/ids/[consumer_id]下,保存了 Consumer group 中各个 consumer 当前正在读取的各个 topic 及对应的数据流。

  • Consumer Offset 追踪信息:记录在 persistent 类型的 znode 路径/consumers/[group_id]/offsets/[topic]/[broker_id-partition_id] 下,保存了特定 Consumer group(ID 为[group_id]))当前读到的特定主题([topic])中特定分片([broker_id-partition_id])的偏移量值。


发布于: 刚刚阅读数: 5
用户头像

InfoQ签约作者 2018-11-30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
ZooKeeper应用案例_zookeeper_穿过生命散发芬芳_InfoQ写作社区