Zookeeper 是一个高性能、高可靠的分布式协调系统,是 Google Chubby 的一个开源实现。Zookeeper 能够为分布式应用提供一致性服务,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。它以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer。
很多工作中用过的组件如Dubbo、kafka、Solr、Hadoop、HBase等都需要依赖Zookeeper。

近日了解到 Kafka 正在酝酿重大更新,可能会提供自管理的元数据仲裁机制以消除对 Zookeeper 的依赖,社区呼吁也相当强烈。那么一般而言 Zookeeper 在分布式系统中扮演什么角色?目前 Zookeeper 都应用在哪些分布式架构中?本文从 Zookeeper 可以聊起,盘点那些离不开 Zookeeper 的分布式技术架构!

一. Zookeeper 概述

Zookeeper 是一个高性能、高可靠的分布式协调系统,是 Google Chubby 的一个开源实现。Zookeeper 能够为分布式应用提供一致性服务,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

Zookeeper 使用 Zab 协议传递 leader 的状态改变,保证 leader 与 follower 的一致性。Zab 全称 Zookeeper Atomic Broadcast protocol,是 Paxos 共识算法的经典实现。

Zookeeper 应用非常广泛,应用场景主要包括:

  • 数据发布订阅(配置中心)
  • 命名服务(保存全局唯一ID)
  • 分布式协调服务(Watcher、异步通知)
  • 心跳检测(临时节点)
  • 任务进度上报(临时节点)
  • Master选举(临时节点、Watcher)
  • 分布式锁(临时节点、Watcher)
前面介绍说 Zookeeper 是一个高性能、高可靠的系统,之所以是高性能主要因为 Zookeeper 保存在内存中,此外 Zookeeper 通常是集群模式,不存在单点故障即保证了其可靠性。
二. Kafka 与 Zookeeper
Zookeeper 在 Kafka 架构中扮演着重要角色。Kafka 使用 Zookeeper 进行元数据管理,保存 broker 注册的信息,包括 Topic、Partition 信息等,选举 Partition Leader,低版本 Kafka Consumer 的 offset 信息也保存在 Zookeeper 中。
我们从 Kafka 架构中来看 Kafka 与 Zookeeper 的关系 ,如下
来源:云栖社区
如图中所示,Kafka Producer 端直接连接 broker.list 列表。而Broker 端则使用 Zookeeper 注册 broker 信息,监控 Partition leader 存活性;Comsumer 端则使用 Zookeeper 注册 comsumer 信息,同时用来发现 broker 列表,并和 Partition leader 建立 socket 连接获取消息。

三. Hadoop 与 Zookeeper
Zookeeper 是作为 Hadoop 子项目发展起来的,最初的设计目标就是为 Hadoop 生态组件之间提供一致性协调服务的,因此在 Hadoop 体系(这里主要指 HDFS 与 YARN)中使用广泛。
在 Hadoop 中,Zookeeper 主要用来实现 HA(High Availability),包括 HDFS NameNode 和 YARN ResourceManager 的 HA。这里就 YARN ResourceManager 的 HA 架构举例,如下
来源:Hadoop官网
如上图所示,更多的实现细节这里不多赘述了,HDFS 利用 Zookeeper 实现 NameNode  HA 的原理同上。
四. HBase 与 Zookeeper
HBase 是大数据领域使用最广泛的 NoSQL 数据库,Zookeeper 在 HBase 架构中同样扮演着重要角色。我们首先来看一张 HBase 的架构图:
来源:MAPR官网
如上所示,HBase 主要包括 HMaster、RegionServer、Zookeeper 三种角色。我们可以很清楚的看到,HBase 使用 Zookeeper 作为分布式协调服务,来维护集群中服务的状态,所有的 RegionServer 和 Active HMaster 都要与 Zookeeper 保持会话(session)。Zookeeper 维护着哪些 servers 是健康可用的,并且在 server 故障时做出通知。
五. Solr 与 Zookeeper
Zookeeper 在 Solr 的架构中也有非常重要的应用。生产环境中我们通常使用 SolrCloud 模式,Solr 集群依赖 Zookeeper 管理相关配置信息和集群的运行状态,并使用 Zookeeper 进行主节点选举。

提及 Solr 就不得不说说 Elasticsearch,Elasticsearch 同 Solr 一样也是非常流行的搜索引擎,但是 Elasticsearch 却不依赖 Zookeeper 做分布式协调,而是自带集群分布式协调系统(Zen Discovery 或 Zen2),这也是 Elasticsearch 与 Solr 之间的重要区别之一。

Zookeeper在分布式架构中的应用的更多相关文章

  1. Zookeeper和分布式环境中的假死脑裂问题(转)

    Zookeeper和分布式环境中的假死脑裂问题 最近和同事聊天无意间发现他们的系统也存在脑裂的问题.想想当初在我们的系统中为了解决脑裂花了非常大的功夫,现在和大家一起讨论下脑裂,假死等等这些问题和解决 ...

  2. 分布式架构中shiro

    分布式架构中shiro 前言:前段时间在搭建公司游戏框架安全验证的时候,就想到之前web最火的shiro框架,虽然后面实践发现在netty中不太适用,最后自己模仿shiro写了一个缩减版的,但是中间花 ...

  3. 分布式架构中一致性解决方案——Zookeeper集群搭建

    当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...

  4. Zookeeper详细使用解析!分布式架构中的协调服务框架最佳选型实践

    Zookeeper概念 Zookeeper是分布式协调服务,用于管理大型主机,在分布式环境中协调和管理服务是很复杂的过程,Zookeeper通过简单的架构和API解决了这个问题 Zookeeper实现 ...

  5. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html Zookeeper 分布式服务框架是 Apa ...

  6. ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据

    引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知识,理解起来比较抽象所以还需要借助一些应用场景,来帮我们 ...

  7. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据(转载)

    本文转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Had ...

  8. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据--转载

    原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Hadoop ...

  9. ASP.Net Core 中使用Zookeeper搭建分布式环境中的配置中心系列一:使用Zookeeper.Net组件演示基本的操作

    前言:马上要过年了,祝大家新年快乐!在过年回家前分享一篇关于Zookeeper的文章,我们都知道现在微服务盛行,大数据.分布式系统中经常会使用到Zookeeper,它是微服务.分布式系统中必不可少的分 ...

随机推荐

  1. 配置 Nginx 反向代理 WebSocket

    用Nginx给网站做反向代理和负载均衡是广泛使用的一种Web服务器部署技术.不仅能够保证后端服务器的隐蔽性,还可以提高网站部署灵活性. 今天我们来讲一下,如何用Nginx给WebSocket服务器实现 ...

  2. Kafka MirrorMaker 跨集群同步工具

    一.MirrorMaker介绍 MirrorMaker是Kafka附带的一个用于在Kafka集群之间制作镜像数据的工具.该工具从源集群中消费并生产到目标群集.这种镜像的常见用例是在另一个数据中心提供副 ...

  3. 颜色rgba和16进制

    今天阅读代码的时候看到了一个实现颜色渐变的效果,不同于以往使用函数实现的颜色渐变,这个是规律的递增rgba里面的几个参数完成的,看起来就像是等差数列一样.没想到还能这样来,简单的了解了一下 rgba的 ...

  4. Beego学习笔记5:MVC-VC

    MVC-VC 1>     新建一个user.go控制器,其代码如下: package controllers import ( "webapp/models" " ...

  5. echarts自定义悬浮框的显示

    最近在使用echarts的地图功能 ,业务需求是显示前五的具体信息,并且轮流显示,首先解决轮流显示的问题 var counta = 0; //播放所在下标 var mTime = setInterva ...

  6. [JS设计模式]:观察者模式(即发布-订阅者模式)(4)

    简介 观察者模式又叫发布---订阅模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知. 举一个现实生活中的例子,例如小 ...

  7. 使用SAP CRM中间件XIF(External Interface)一步步创建服务订单

    tcode WE19, choose an existing IDOC in the system: Just change the existing IDOC Service Order ID to ...

  8. Python实现的贪婪算法

    个州的听众都收听到.为此,你需要决定在哪些广播台播出.在每个广播台播出都需要支出费用,因此你力图在尽可能少的广播台播出 # 1.创建一个列表,其中包含要覆盖的州 states_needed = set ...

  9. crontab定时任务不执行,单独运行sh生效

    虽然已经从事运维两三年了. 但是今天写的计划任务没有执行,排除了下, 这里整理下,方便后期查看. 排除思路 1. 确保crond服务是开机自启和当前是启动的. # centos systemctl s ...

  10. 使用jmeter 设计流程发起测试

    业务场景 需要实现用户在登录后,能够持续的发起流程. 需要注意的点: 1.使用不同的用户登录. 2.登录后发起可以持续的发起流程. 实现步骤 1.先使用badboy 录制脚本. 2.使用jmeter ...