zookeeper学习点

来源:互联网 发布:下载漫画的软件 编辑:程序博客网 时间:2024/06/03 19:30

该博文以四个问题为切入点分析zookeeper的相关内容,作为自己学习zookeeper的初步认知。

  1. zookeeper是什么?
    zookeeper是管理分布式集群的重要开源工具!它的特点是管理、开源。所以它是集群的管理者,相当于有一个仓储管理员管理着各个仓库。zookeeper是管理者,有时候一个管理者也会忙不过来或者调休的时候,则需要多个管理者,因此zookeeper可以以集群方式工作,所以zookeeper可以是单机版,也可以是集群版。这样说来在一个分布式集群中,我们拥有管理集群加上工作集群。工作集群的每个节点对zookeeper而言就是一个客户端。

  2. zookeeper可以干什么?
    zookeeper作为管理者可以有不同的功能,比如对hadoop而言,我们需要保证集群中一定有且只有一个namenode,对于hbase则保证只有一个HMaster,而对于kafka来说则需要保证对每一个topic下面的partition都有一个leader去控制该partition的所有处理过程并且在该leader失效时候完成新的leader选举。

    综上所言,zookeeper完成的是集群的配置管理工作,确保集群的特性!可以得出zookeeper实现了一个分布式锁。当指定了集群的管理者后,对数据的处理只能有该管理者操作,确保了多机器数据操作的正确性。

  3. zookeeper为什么可以做到?

        zookeeper集群存在两种角色leader与learner,learner角色分为observer与follower。无论任何机器的数据有变更,都会将信息同步到其它机器。
          作为leader职责有负责投票的发起与决议,更新系统状态
          作为observer职责有接收客户端请求,将写请求转发给leader,只同步leader的状态不参与投票,目的是提高读取速度。
          作为follower职责有接收客户端请求并返回结果,参与选举投票.

    每一个zookeeper都可以作为服务端为客户端提供服务,所有的写请求都会转发给leader,由leader指定follower完成数据写请求。由于每台zookeeper机器都有所有信息的副本,因此读请求可以直接在该zookeeper上进行。

          作为写请求,zookeeper会将写同步到所有节点,zookeeper采用一个自定义的信息原子操作协议,保证zookeeper本地的副本不会出现不一致现象。当leader接收到一个写请求,它会计算写之后的状态,封装成一个事务进行。

  4. zookeeper怎样做到?
    zookeeper拥有层次的命名空间,和linux文件系统类似,但是zookeeper的znode兼具文件和目录的特点,既可以存储数据又可以索引下级节点。我们看一看kafka使用的zookeeper节点信息。

    这里写图片描述

    图中每个节点是一个znode,每个znode又三部分组成:
    stat: znode的版本,权限等信息
    data: znode的关联数据
    children: znode的子节点

      znode是客户端访问znode的主要实体。客户端可以通过各种操作来控制znode信息。首先我们可以在节点上设置watch,当节点发生变化时候,会触发watch所对应的操作,zookeeper会向客户端发送且只发送一条消息(watch只能被触发一次);其次znode的节点操作都是原子性的,读取会读所有信息,写会替换节点的所有数据,节点也会有自己的ACL去规定用户的访问权限;最后znode存在两种节点,临时节点与永久节点,对于kafka而言,每台kafka作为zookeeper的客户端,信息注册在znode中作为一类临时节点,临时节点与客户端有关联,生命周期依赖创建它们的会话,一旦会话结束,临时节点会自动删除。这也就解释了zookeeper为什么能够感知节点下线。

综上所言可以得知,zookeeper管理的命名空间可以完成分布式集群的控制管理。其最大的特点在于进行leader选取和配置控制,原子性的操作可以保证写一致性,多集群又可以保证高效的读。

原创粉丝点击