Zookeeper

1. 大数据是什么?

  1.1 大数据就是4V的特征

    Volume (大量) , Velocity (高速) , Variety (多样) , Value (价值) , 即数据体量巨大, 数据类型繁多, 价值密度低, 处理速度快.

  1.2 JavaEE开发与大数据的区别

    1.2.1 JavaEE开发流程

  

    1.2.2 大数据开发流程

    

    

    

    1.2.3 两者区别

      1) 架构层面
        javaEE体系: 三层架构, 表现层 (Web) 业务层 (Service) 持久层 (Dao) . 
        大数据体系: 围绕数据, 数据采集 (数据源) , 数据存储, 数据计算 (分析) , 数据展示. 
      2) 技术层面
        JavaEE: 成熟, 解决方案多, 技术点集中. 
        大数据: 相对年轻, 迭代更新快, 解决方案相对少, 技术相当繁琐, 杂, 碎. 
      3) 开发层面
        JavaEE: 代码量很大, 偏向业务, 运维等任务相对较少, 固定搭配, 习惯用法较多. 
        大数据: 代码量很少, 偏向技术 (原理, 知识) , 运维任务略多 (集群, 服务器等) , sql数据分析, 类sql, hql. 
      4) 市场层面
        javaEE: 很成熟, 有自己的行业规范, 如日中天
        大数据: 市场起步阶段, 规范有待健全, 朝阳产业 (结合人工智能, 机器学习等) .

2. Apache Zookeeper

  2.1 Zookeeper概述

    Zookeeper是一个分布式协调服务的开源框架. 主要用来解决分布式集群中应用系统的一致性问题.

    Zookeeper本质上是一个

      分布式的小文件存储系统. 提供基于类似于文件系统的目录树方式的数据存储, 并且可以对树种的节点进行有效管理.

      维护和监控你存储的数据的状态变化, 通过监控这些数据状态的变化, 从而可以达到基于数据的集群管理.

      分布式程序, 可以多台服务器部署 (可靠, 稳定) .

      Zookeeper是一个主从结构集群.

  2.2 Zookeeper特性

    全局数据一致: 集群中每个服务器保存一份相同的数据副本, Client无论连接到哪个服务器, 展示的数据都是一致的, 这是最重要的特性.

    可靠性: 如果消息被其中一台服务器接受, 那么将被所有的服务器接受.

    顺序性: 包括全局有序和偏序两种: 全局有序是指如果一台服务器上消息a在消息b前发布, 则在所有Server上消息a都将在消息b前被发布. 偏序是指如果一个消息b在消息a后被同一个发送者发布, 消息a必将排在消息b前面.

    数据更新原子性: 一次数据更新要么成功 (半数以上节点成功) , 要么失败, 不存在中间状态.

    实时性: Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,  或者服务器失效的信息

  2.3 Zookeeper集群角色

    

    Leader: Zookeeper集群工作的核心, 事务请求 (写操作) 的唯一调度和处理者, 保证集群事务处理的顺序性, 集群内部各个服务器的调度者.

    对于create, setData, delete等有写操作的请求, 则需要统一转发给leader处理, leader需要决定编号, 执行操作, 这个过程称为一个事务.

    Follower: 处理客户端非事务 (读操作) 请求, 转发事务请求给Leader. 参与集群Leader选举投票.

    此外, 针对访问量较大的Zookeeper集群, 还可新增观察者角色.

    Observer: 观察者角色, 观察Zookeeper集群的最新状态变化并将这些状态同步过来, 其对于非事务请求可以进行独立处理, 对于事务请求, 则会转发给Leader服务器进行处理. 不会参与任何形式的投票只提供非事务服务, 通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力.

    可以分为主从主备两种方式:

      主从: 主角色 leader

          从角色 follower

          常见的一主多从的架构 (storm, hadoop等) , 主从架构各司其职, 互相配合.

      主备: 主角色 active

          备角色 standby

          主备角色常用于解决单点故障问题, 常见的是一主一备, 只有主角色发生故障时, 备角色才会切换成主角色, 同一个时刻只能有一个主角色.

  2.4 Zookeeper集群搭建

    Zookeeper集群搭建指的是Zookeeper分布式模式安装. 通常由2n+1台servers组成. 这是因为为了保证Leader选举 (基于Paxos算法的实现) 能过得到多数的支持, 所以Zookeeper集群的数量一般为奇数.

    如果要想使用Observer模式, 可在对应节点的配置文件添加配置: peerType=observer, 其次必须在配置文件指定哪些节点被指定为Observer, 如: server. 1:hadoop01:2181:3181:observer

  2.5 Zookeeper数据模型

    Zookeeper的数据模型, 在结构上和标准文件系统非常相似, 拥有一个层次的命名空间, 都是采用树形层次结构, Zookeeper树中的每个节点被称为--Znode. 和文件系统的目录树一样, Zookeeper树中的每个节点可以拥有子节点. 但也有不同之处:

    1) Zookeeper兼具文件和目录两种特点: 既像文件一样维护着数据, 元信息, ACL, 时间戳等数据结构, 又像目录一样可以作为路径标识的一部分, 并可以具有子Znode. 用户对Znode具有增删改查等操作 (权限允许的情况下) .

    2) Znode具有原子性操作: 读操作将获取与节点相关的所有数据, 写操作也将替换掉节点的所有数据. 另外, 每一个节点都拥有自己的ACL (访问控制列表) , 这个列表规定了用户的极限, 即限定了特点用户对目标节点可以执行的操作.

    3) Znode存储数据大小有限制: Zookeeper虽然可以关联一些数据, 但并没有被设计为常规的数据库或者大数据存储, 相反的是, 他用来管理调度数据, 比如分布式应用中的配置文件信息, 状态信息, 汇集信息等. 这些数据的共同特性就是他们都是很小的数据, 通常以KB为大小单位. Zookeeper的服务器和客户端都被设计为严格检查并限制每个Znode的数据大小至多1M, 当时常规使用中应该远小于此值.

    4) Znode通过路径引用: 如同Unix中的文件路径. 路径必须是绝对的. 因此他们必须由斜杠字符开头. 除此以外, 他们必须是唯一的, 也就是说每一个路径只有一个表示, 因此这些路径不能改变. 在Zookeeper中, 路径由Unicode字符串组成, 并且有一些限制. 字符串"/zookeeper"用以保存管理信息, 比如关键配额信息.

  2.6 数据结构图

    

    图中的每个节点称为一个Znode. 每个Znode由3部分组成:

      1) stat: 此为状态信息, 描述该Znode的版本, 权限等信息

      2) data: 与该Znode关联的数据

      3) children: 该Znode下的子节点

  2.7 节点类型

    Znode有两种, 分别为临时节点永久节点

    节点的类型在创建时即被确定, 并且不能改变

    1) 临时节点: 该节点的生命周期依赖于创建他们的会话. 一旦会话结束, 临时节点将被自动删除, 当然也可以手动删除. 临时节点不允许拥有子节点.

    2) 永久节点: 该节点的生命周期不依赖于会话, 并且只有在客户端显示执行删除操作的时候, 他们才能被删除.

    Znode还有一个序列化的特性, 如果创建的时候指定的话, 该Znode的名字后面会自动追加一个不断增加的序列号. 序列号对于此节点的父节点来说是唯一的, 这样便会记录每个子节点创建的先后顺序. 他的格式为"%10d" .

    这样便会存在四种类型的Znode节点, 分别对应:

    1) 永久非序列化节点

    2) 临时非序列化节点

    3) 永久序列化节点

    4) 临时序列化节点

  2.8 节点属性

    每个Znode都包含了一系列属性, 通过命令get, 可以获得节点的属性.

    1) dataVersion: 数据版本号, 每次对节点进行set操作, dataVersion的值都会增加1 (即使设置的是相同数据) , 可有效避免了数据更新时出现的先后顺序问题.

    2) cversion: 子节点的版本号. 当Znode的子节点有变化时, cversion的值就会增加1.

    3) cZxid: Znode创建的事务id.

    4) mZxid: Znode被修改的事务id, 即每次对Znode的修改都会更新mZxid.

    对于Zookeeper来说, 每次的变化都会产生一个唯一的事务id, zxid (Zookeeper Transaction ID) . 通过zxid, 可以确定更新操作的先后顺序. 例如, 如果zxid1小于zxid2, 说明zxid1操作先于zxid2发生, zxid对于整个Zookeeper都是唯一的, 即使操作的是不同的Znode.

    5) ctime: 节点创建的时间戳

    6) mtime: 节点最新一次更新发生时的时间戳

    7) ephemeralOwner: 如果该节点为临时节点, ephemeralOwner值表示与该节点绑定的session id, 如果不是, ephemeralOwner值为0.

    在Client和Server通信之前, 首先需要建立连接, 该连接称为session. 连接建立后, 如果发生连接超时, 授权失败, 或者显式关闭连接, 连接便处于CLOSED状态, 此时session结束.

  2.9 Zookeeper Watcher (监听机制)

    Zookeeper提供了分布式数据发布 / 订阅功能, 一个典型的发布 / 订阅模型系统定义了一种一对多的订阅关系, 能让多个订阅者同时监听某一个主题对象, 当这个主题对象自身状态变化时, 会通知订阅者, 使他们能够做出相应的处理.

    Zookeeper中, 引入了Watcher机制来实现这种分布式的通知功能. Zookeeper允许客户端向服务端注册一个Watcher监听, 当服务端的一些事件触发了这个Watcher, 那么就会指定客户端发送一个事件通知来实现分布式的通知功能.

    触发事件种类很多: 节点创建, 节点删除, 节点改变, 子节点改变等.

    总的可以概括Watcher为三个过程:

    1) 客户端向服务端注册Watcher

    2) 服务端事件发生触发Watcher

    3) 客户端回调Watcher得到触发时间情况

    Watcher机制特点:

      一次性触发: 事件发生触发监听, 一个WatcherEvent就会被发送到设置监听的客户端, 这种效果是一次性的, 后续再次发生同样的事件, 不会再次触发.

      事件封装: Zookeeper使用WatchedEvent对象来封装服务端事件并传递.

            WatcherEvent包含了每一个事件的三个基本属性: 通知状态 (KeeperState) , 事件类型 (EventType) , 节点路径 (path) .

      event异步发送: Watcher的通知事件从服务端发送到客户端是异步的.

      先注册再触发: Zookeeper中的Watch机制, 必须客户端先去服务端注册监听, 这样事件发送才会触发监听, 通知给客户端.

  2.10 通知状态和事件类型

    同一个事件类型在不同的通知状态中代表的含义有所不同.

    其中连接状态事件 (type=None, path=null) 不需要客户端注册, 客户端只要有需要直接处理就行了.

  2.11 Zookeeper选举机制

    zookeeper默认的算法是FastLeaderElection, 采用投票数大于半数则胜出的逻辑.

    服务器ID: 编号越大在选择算法中的权重越大

    选举状态: LOOKING, 竞选状态

          FOLLOWING: 随从状态, 同步leader状态, 参与投票

          OBSERVING:  观察状态, 同步leader状态, 不参与投票

          LEADING: 领导者状态

    数据ID: 服务器中存放的最新数据version, 值越大说明数据越新, 在选举算法中数据越新权重越大

    逻辑时钟: 也叫投票的次数, 同一轮投票过程中的逻辑时钟值是相同的. 每投完一次票这个数据就会增加, 然后与接收到的其他服务器返回的投票信息中的数值对比, 根据不同的值做出不同的判断.

  2.11.1 全新集群选举

    假设目前有5台服务器, 每台服务器均没有数据, 他们的编号分别是1, 2, 3, 4, 5, 按编号依次启动, 他们的选举过程如下:

    1) 服务器1启动, 给自己投票, 然后发投票信息, 由于其他机器还没有启动所有他收不到反馈信息, 服务器1的状态一直属于LOOKING.

    2) 服务器2启动, 给自己投票, 同时与之前启动的服务器1交换结果, 由于服务器2的编号大所以服务器2胜出, 但此时投票数没有大于半数, 所以两个服务器的状态依然是LOOKING.

    3) 服务器3启动, 给自己投票, 同时与之前启动的服务器1, 2交换信息, 由于服务器3的编号最大所以服务器3胜出, 此时投票数正好大于半数, 所以服务器3称为Leader, 服务器1, 2成为Follower.

    4) 服务器4启动, 给自己投票, 同时与之前启动的服务器1, 2, 3交换信息, 尽管服务器4的编号大, 但之前服务器3已经胜出, 所以服务器4只能成为Follower.

    5) 服务器5启动, 后面的逻辑同服务器4成为Follower.

  2.11.2 非全新集群选举

    对于运行正常的zookeeper集群, 中途有机器down掉, 需要重新选举时, 选举过程就需要加入数据ID, 服务器ID, 逻辑时钟.

    数据ID: 数据新的version就大, 数据每次更新都会更新version.

    服务器ID: 就是我们配置的mvid的值, 每个机器一个.

    逻辑时钟: 这个值从0开始递增, 每次选举对应一个值. 如果在同一次选举中, 这个值是一致的.

    这样选举的标准就变成:

      1) 逻辑时钟小的选举结果被忽略, 重新投票.

      2) 统一逻辑时钟后, 数据id大的胜出.

      3) 数据ID相同的情况下, 服务器ID大的胜出.

(0)

相关推荐

  • 一文彻底搞懂 zookeeper 核心知识点

    来自公众号:程序员内点事 初识 zookeeper Zookeeper 它作为Hadoop项目中的一个开源子项目,是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能.高可用,且具有 ...

  • 面试:Zookeeper常见11个连环炮

    获取:10万字的面试小抄 面试的时候,面试官只要看到你简历的上写的有Zookeeper(熟悉.掌握)之类,那你至少要准备接下来的11连问. NO1:说说zookeeper是什么? ZooKeeper是 ...

  • 万字详解 Zookeeper 的五个核心知识点

    Java高级架构师2021-01-15 15:20:57 1 ZooKeeper简介 ZooKeeper 是一个开源的分布式协调框架,它的定位是为分布式应用提供一致性服务,是整个大数据体系的管理员.Z ...

  • 便捷搭建 Zookeeper 服务器的方法

    极客挖掘机 今天 什么是 ZooKeeper ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协 ...

  • 全网最祥,万字长文全面剖析ZooKeeper

    一. ZooKeeper是什么 ZooKeeper由雅虎研究院开发,是Google Chubby的开源实现,后来托管到Apache,于2010年11月正式成为Apache的顶级项目.  ZooKeep ...

  • 你真的懂Zookeeper么?

    谈起Zookeeper可能很多开发者都说,这个很简单啊,我在Dubbo和Kafka中经常用,没什么难的,但是用了这么久,你真的懂Zookeeper么? 4月6日的开课吧<HelloWorld公开 ...

  • 深入浅出Zookeeper

    ZooKeeper 是一个分布式协调服务 ,由 Apache 进行维护. ZooKeeper 可以视为一个高可用的文件系统. ZooKeeper 可以用于发布/订阅.负载均衡.命令服务.分布式协调/通 ...

  • Zookeeper工作过程详解

    一.Zookeeper工作机制 分布式和集中式系统相比,有很多优势,比如更强的计算能力,存储能力,避免单点故障等问题.但是由于在分布式部署的方式遇到网络故障等问题的时候怎么保证各个节点数据的一致性和可 ...

  • 插件分享 | 如何快速上手 Zookeeper 未授权漏洞

    全文共:3410 字   预计阅读时间:9 分钟 前言:Goby 是一款实时网络空间测绘工具,我尤其喜欢插件市场,它可以集成很多我们平时利用的小工具,不用再去烦恼的打开一个个文件夹.初次编写插件我选择 ...

  • idea+centos7+zookeeper报错connectionloss,timeout问题

    之前一直报错连接不上,检查了很多遍ip也对着,端口也是,配置等等都没有问题,也能ping通linux主机,一整天没调通,烦都烦死了. 后来第二天继续调试,发现之前关闭防火墙的时候,使用的是system ...

  • zookeeper运维管理详解

    注:运行client是指作为客户端,与server进行数据通信,而运行server是指将ZK作为服务器部署运行. 1.1.2软件环境 ZooKeeper Server需要6或更高版本的JDK支持.集群 ...

  • 干掉zookeeper:kafka里程碑式改进!

    分布式发布与订阅系统Apache Kafka在即将发布的2.8版本,使用Kafka内部的Quorum控制器来取代ZooKeeper,因此用户第一次可在完全不需要ZooKeeper的情况下执行Kafka ...

  • ZooKeeper技术原理

    本文来源:http://r6a.cn/bybu3 ZooKeeper简介 ZooKeeper概述: ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个 ...

  • Dubbo和Zookeeper

    一.软件架构演进 软件架构的发展经历了由单体架构.垂直架构.分布式架构到流动计算架构的演进过程. 1.单一架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于 ...

  • 学习Zookeeper第一课

    安装单机版Zookeeper 基本命令 ACL权限模块 curator客户端操作ZK Watcher机制 zk的应用场景 安装单机版Zookeeper 下载地址:https://zookeeper.a ...

  • windows下安装zookeeper 及 遇到的问题

    安装个zookeeper,没想到这么难,总时间我差不多花了4,5个小时,弄好的那一刻我简直想哭. 一开始在网上搜的教程,都很简单. 第一步官网下载 第二步复制一份 conf 文件夹下的 zoo_sam ...

  • 【入门】ZooKeeper 相关概念总结

    【入门】ZooKeeper 相关概念总结