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. bootstrap table--面相配置、hook、适配的表格框架

    bootstrap table--面相配置.hook.适配的表格框架

  2. 核与线程 CPU 4核8线程 的解释

    1.物理CPU: 物理CPU就是计算机上实际配置的CPU个数.在linux上可以打开cat /proc/cpuinfo 来查看,其中的physical id就是每个物理CPU的ID,能找到几个phys ...

  3. .net Dapper 实践系列(6) ---事务删除(Layui+Ajax+Dapper+MySQL)

    目录 写在前面 实现步骤 写在最后 写在前面 上一小节,总结了事务多表更新的两种方法.一个是只更新原来的数据,一个是先删除原来的数据再往里面添加新的数据.而这一小节,说的是事务的多表删除. 实现步骤 ...

  4. BAPI_TRANSACTION_COMMIT

    通过NCO执行SAP里面的 BAPI_TRANSACTION_COMMIT 并不能直接生效,类似SQL 里面的事物一样,需要有开始与结束,正确的方式如下: RfcSessionManager.Begi ...

  5. c# mvc webapi的put报405错误

    程序在本机调试可正常修改,本机是iis11 放到服务器上,报错了:405.服务器iis7.0 返回的错误页面: <!DOCTYPE html PUBLIC "-//W3C//DTD X ...

  6. .NET CORE webapi epplus 导入导出 (实习第一个月的笔记)

    最近有个需求就是网页表格里面的数据导出到excel  于是从各位前辈的博客园搜了搜demo  大部分非为两类 都是用的插件NPOI和Eppluse ,因此在这里就介绍Eppluse 用法,还有就是在博 ...

  7. GitLab CI/CD的官译【原】

    CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...

  8. 石油petrolaeum单词petrolaeum原油

    petroleum 1.a flammable liquid ranging in color from clear to very dark brown and black, consisting ...

  9. Spring Cloud Sleuth 整合

    引入Maven依赖 org.springframework.cloud spring-cloud-starter-sleuth 日志发生的变化 当应用ClassPath下存在org.springfre ...

  10. MYSQL中的时间类型

    时间上总共有五中表示方法:它们分别是 time.date.datetime.timestamp和year. time :  “hh:mm:ss”格式表示的时间值,格式显示TIME值,但允许使用字符串或 ...