Zookeeper概述
Zookeeper是Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,可以实现集群中的分布式协调服务。所谓的分布式协调服务,就是在集群的节点中进行可靠的消息传递,来协调集群的工作。
Zookeeper之所以能够实现分布式协调服务,靠的就是它能够保证分布式数据一致性。所谓的分布式数据一致性,指的就是可以在集群中保证数据传递的一致性。
Zookeeper可以干什么?
数据发布订阅、负载均衡、命名服务、分布式协调/通知、配置管理、集群管理、分布式锁、分布式队列等功能
(Zookeeper设计本来就是充着做协调服务的,然而,协调服务是各异的,基本上没有统一算法框架或者服务架构可言,实际上,Zookeeper只给你提供了一堆操作,大部分都是基于znode,还有重要的watch机制。怎么利用它来做协调服务都是要开发者自己实现)
Zookeeper的特点
顺序一致性
从同一个客户端发起的事务请求,最终将会严格按照其发起顺序被应用到zookeeper中
原子性
所有事物请求的处理结果在整个集群中所有机器上的应用情况是一致的,即,要么整个集群中所有机器都成功应用了某一事务,要么都没有应用,一定不会出现集群中部分机器应用了改事务,另外一部分没有应用的情况。
单一视图
无论客户端连接的是哪个zookeeper服务器,其看到的服务端数据模型都是一致的。
可靠性
一旦服务端成功的应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会一直保留下来,除非有另一个事务又对其进行了改变。
实时性
zookeeper并不是一种强一致性,只能保证顺序一致性和最终一致性,只能称为达到了伪实时性。
zookeeper的数据模型
zookeeper中可以保存数据,正是利用zookeeper可以保存数据这一特点,我们的集群通过在zookeeper里存取数据来进行消息的传递。
zookeeper中保存数据的结构非常类似于文件系统。都是由节点组成的树形结构。不同的是文件系统是由文件夹和文件来组成的树,而zookeeper中是由znode来组成的树。
每一个znode里都可以存放一段数据,znode下还可以挂载零个或多个子znode节点,从而组成一个树形结构。
(zookeeper不能作为大数据存储系统,提供的每个“目录”称为znode,默认提供了1MB的存储空间,用来辅助协调工作,只适合保存元数据metadata)
zookeeper功能强大,成熟,稳定,几个缺点如下:
1.无http访问接口,只能通过api访问
2.监控管理工具不完善
3.底层数据采用类似linux文件结构存储,大数据量时效率比较低
4.api使用不方便,需要coding 重复注册watcher,session失效重连,异常处理等
5.zookeeper只保证数据最终一致性,如果想保证取得的数据是最新的,需要收工调用sync方法
6.zookeeper功能强大,导致实现和使用起来有些复杂,比如共享配置和服务发现可以使用简单点的etcd
zookeeper使用的quorum的2pc机制来做数据一致性,这样的一种强一致性的代价就是吞吐率,写入速度极慢。
使用zookeeper比较好的方式是:小集群(zookeeper集群)+大集群(比如 hadoop),通过zookeeper来保证元信息的一致性,大集群来存储真正的数据
zookeeper基本原理及适用场景 http://blog.chinaunix.net/uid-26748613-id-4536290.html
zookeeper集群的搭建http://www.cnblogs.com/zpb2016/p/5791636.html
zookeeper的shell下操作http://www.cnblogs.com/zpb2016/p/5791637.html
zookeeper中client命令实践http://www.cnblogs.com/felixzh/p/5873306.html
zookeeper letter 描述与实践http://www.cnblogs.com/felixzh/p/5873255.html
zookeeper监控管理http://www.cnblogs.com/felixzh/p/5868626.html
zookeeper的java api操作http://www.cnblogs.com/zpb2016/p/5791641.html
Zookeeper+Spring跨机房容灾系统以及灰度发布在线付费视频http://www.xuetuwuyou.com/course/20/reviews/
Zookeeper 本身单点失效问题?
Zookeeper本身也是集群啊,推荐配置不少于3个服务器。ZK集群的机制是只要超过半数的节点OK,集群就能正常提供服务。只有ZK节点挂得太多,只剩一半或不到一半节点能工作,集群才失效。
Zookeeper在哪些系统中使用?
storm中用zookeeper来协调同步集群中机器的状态(并不传递消息)。基本不会有负载,对机器性能没什么要求。jstorm也是用zk来做一致性服务。
dubbo中采用zookeeper来作注册中心,在阿里内部采用的是基于数据库的注册中心,我们自己用dubbo的时候采用了zookeeper,配置起来非常方便。当然如果采用redis或者自己写个简单的基于内存的注册中心也是可以的。从稳定性来讲,个人觉得zookeeper是比较好的选择,毕竟zookeeper集群中的机器只要不是半数以上宕掉,服务就是可用的。dubbo服务的消费者和提供者都需要用到zookeeper,然而消费者和提供者之间的长连接建立后,zookeeper参与程度就比较弱了(仅需要接受一些心跳包),除非此时有新的提供者消费者加入或者离开(需要更新节点数据)。因此负载也是非常低的,基本不用考虑性能问题。zookeeper还同时起到了监控各个服务的作用。
(dubbo是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,dubbo提供一个框架解决这个问题)
Hadoop也是需要用到zookeeper的,用来管理集群中的NameNode。
Kafka集群依赖于ZooKeeper实现生产者在消费端的负载均衡,动态的集群扩展等等
zookeeper在dubbo到底起了什么作用,dubno如何解决了阿里的高并发问题?
zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是ip地址和服务名称的对应关系。zookeeper通过心跳机制可以检测挂掉的机器并将挂掉机器的ip和服务对应关系从列表中删除。
至于支持高并发,简单来说就是横向扩展,在不更改代码的情况通过添加机器来提高运算能力。通过添加新的机器向zookeeper注册服务,服务的提供者多了能服务的客户就多了。
简单的分布式系统,可以通过静态的配置文件,来记录这些数据:进程之间的连接对应关系,他们的IP地址和端口,等等。然而一个自动化程度高的分布式系统,必然要求这些状态数据都是动态保存的。这样才能让程序自己去做容灾和负载均衡的工作。
然而,如果我们只是用一个进程来充当这个工作。那么这个进程就成为了这个集群的“单点”——意思就是,如果这个进程故障了,那么整个集群可能都无法运行的。所以存放集群状态的目录服务,也需要是分布式的。幸好我们有ZooKeeper这个优秀的开源软件,它正是一个分布式的目录服务区。
ZooKeeper可以简单启动奇数个进程,来形成一个小的目录服务集群。这个集群会提供给所有其他进程,进行读写其巨大的“配置树”的能力。这些数据不仅仅会存放在一个ZooKeeper进程中,而是会根据一套非常安全的算法,让多个进程来承载。这让ZooKeeper成为一个优秀的分布式数据保存系统。
由于ZooKeeper的数据存储结构,是一个类似文件目录的树状系统,所以我们常常会利用它的功能,把每个进程都绑定到其中一个“分枝”上,然后通过检查这些“分支”,来进行服务器请求的转发,就能简单的解决请求路由(由谁去做)的问题。另外还可以在这些“分支”上标记进程的负载的状态,这样负载均衡也很容易做了。
相关推荐
《Zookeeper 3.4.5-CDH5.15.1 安装详解》 Zookeeper,作为Apache的一款开源分布式协调服务,...通过本文的介绍,希望能帮助你更深入地了解Zookeeper在CDH5.15.1环境中的作用,以及如何有效地使用和维护这一关键组件。
以上是对Apache Zookeeper 3.8.4版本的基本介绍,它在分布式系统中扮演着重要角色,帮助解决复杂性问题,提高系统的稳定性和可扩展性。在实际应用中,开发者需要根据具体需求对其进行配置和调优。
下面我们将详细介绍如何在Linux环境下部署ZooKeeper集群以及ZooKeeper的关键知识点。 1. **ZooKeeper角色与架构**:ZooKeeper集群由多个服务器组成,每个服务器都扮演着数据节点(ZNode)的角色。整个集群遵循一个...
新功能 ZOOKEEPER-3301-强制执行配额限制 ZOOKEEPER-3601 - 介绍故障注入框架:ZooKeeper 的 Byteman ZOOKEEPER-3907-添加有关指标警报的文档 ZOOKEEPER-4211-向 Prometheus 公开配额指标
本篇将详细介绍如何在Windows和Linux操作系统上安装并启动Zookeeper 3.4.7版本。 首先,我们获取的是名为"zookeeper-3.4.7.tar.gz"的压缩包,这是Zookeeper的标准发行版。在Windows和Linux系统中,我们都需要先完成...
6. **文档**:项目文档可能包含README文件,介绍如何安装、配置和使用Zookeeper Visualizer,还可能有开发者指南、API参考等。 7. **许可证文件**:开源项目通常会包含一个LICENSE文件,明确其授权条款,规定他人...
1. **Zookeeper**:我们已经在前面有所介绍,它是分布式协调服务,常被用作微服务架构中的核心组件。 2. **Dubbo**:是阿里巴巴开源的高性能Java RPC框架,它依赖于ZooKeeper来发现和管理服务,实现服务注册与发现。...
Apache ZooKeeper 是一个分布式协调服务,它为分布式应用程序提供了一个高效、可靠的系统来管理命名空间、配置信息以及分协调任务。在Linux环境下部署和使用ZooKeeper是许多分布式系统的基础,比如Hadoop、Kafka等。...
本篇文章将围绕Zookeeper 3.4.9在Linux系统中的安装、配置和使用进行详细介绍。 一、Zookeeper简介 Zookeeper的核心概念是分布式共享的命名空间和一个基于版本的文件系统。它将数据存储在节点(ZNode)中,这些节点...
介绍ZooKeeper-3.4.6版本的分布式安装,力求细致,提供精确的安装指导。本文的安装环境是64位的SuSE 10.1 Linux,也适用于ZooKeeper-3.4.8。 ZooKeeper节点间不需要互登录,因此不用配置免密码登录。
五、ZkClient介绍 ZkClient是Zookeeper的一个轻量级客户端库,它提供了更友好的API,使得开发者能更容易地与Zookeeper交互。ZkClient支持异步和同步操作,同时具备丰富的Watch事件处理能力。例如,可以使用ZkClient...
本文将详细介绍Zookeeper的核心概念、工作原理以及其在Java环境中的应用。 一、Zookeeper核心概念 1. **节点(Znode)**:Zookeeper的数据存储结构类似于文件系统的树状结构,每个节点称为Znode,可以存储数据,并...
**ZooKeeper 3.4.6:集群安装与核心概念详解*...通过以上的介绍,你应该对 ZooKeeper 3.4.6 的核心概念和集群安装有了深入理解。实际使用中,还需要根据具体业务场景进行详细设计和优化,以充分发挥 ZooKeeper 的潜力。
二、Spring Cloud Zookeeper介绍 Spring Cloud Zookeeper是Spring Cloud生态中的一个组件,它为Spring Boot应用提供了与Zookeeper集成的能力,实现了服务注册与发现。通过使用Spring Cloud Zookeeper,我们可以轻松...
关于Zookeeper-3.3.6的深入学习,可以参考博客《Zookeeper详解》(http://blog.csdn.net/u011877584/article/details/78443651),该博客详细介绍了Zookeeper的基础知识和实践案例,对于初学者来说是一份不错的参考...
在本文中,我们将详细介绍如何在Linux环境下安装和配置Zookeeper 3.4.6版本。 首先,安装Zookeeper的前提条件是需要JDK 1.6或更高版本。确保已正确安装并设置了Java环境变量。可以通过`java -version`命令来检查...
本文将详细介绍如何在Linux环境下安装和配置Zookeeper 3.4.6版本,以及一些常用的命令操作。 首先,安装Zookeeper的前提条件是需要Java Development Kit (JDK) 1.6或以上版本。确保已安装JDK并设置了环境变量,可以...
通过以上介绍,我们了解到Zookeeper不仅支持单机部署,还可以通过简单的配置实现集群部署。无论是单机模式还是集群模式,Zookeeper都提供了易于理解和操作的配置选项,极大地简化了分布式系统的搭建过程。对于那些...
在《ZooKeeper-分布式过程协同技术详解》中,会详细介绍ZooKeeper的架构设计、核心功能、API使用以及最佳实践。例如,ZooKeeper的原子操作,如create、delete、exists、get、set等,这些操作都是单次完成的,不会...