zoukankan      html  css  js  c++  java
  • ZooKeeper技术总结

      因为之前学习并使用了Kafka,所以专门查看了有关zookeeper相关的资料,看了大量的博客及官网资料,也因为有些地方理解不清楚向认识的专业人士进行了咨询,这里对这段时间的学习进行总结。

      ZooKeeper特性

             顺序性,client的updates请求都会根据它发出的顺序被顺序的处理;

             原子性,  一个update操作要么成功要么失败,没有其他可能的结果;

             一致的镜像,client不论连接到哪个server,展示给它都是同一个视图;

             可靠性,一旦一个update被应用就被持久化了,除非另一个update请求更新了当前值

             实时性,对于每个client它的系统视图都是最新的

      ZooKeeper集群

      有关Zookeeper的集群,这里要引用官网的一张图

      对上面这张图的各角色的描述如下

      上面这张图需要重点说明的有如下几点:

    1、 Zookeeper集群的读写模式采用的是写任意。即不论是Leader还是Follower还是Observe均能接收到写请求,但是Follower和Observe会把写请求转发给Leader。

    这个地方的理解可能有点拗,就是所有Zookeeper Server只响应来自Leader的写请求,如果不是Leader发起的就先转发给Leader。为什么这么做可以参考下面的数据一致性。

    2、 所谓集群,对外来说就是一个整体,上面Client与Server的链接均为通过负载均衡获取。

    3、 对于kafka而言,每一个Broker服务就是上图中的Client。如果kafka也采用集群的方式,上面的图就应该变成下面这样。

      数据一致性

      对于任何一个Client,不论你连接的是Zookeeper集群的哪个Server,得到的都是同一个数据视图。

      Zookeeper集群最大一个特点就是解决分布式一致性问题。简单讲,数据一致性就是指在对一个副本数据进行更新的同时,必须确保也能更新其他副本(其他副本可能在各个不同的服务器节点),否则不同副本之间的数据将不再一致。

      ZooKeeper是如何做到这一点的,就是采用了paxos算法。

    过程详解:

    1 ,客户端发请求:执行 Client 程序,比如说,我们连接到的是 follower,那么我们就跟 follower 说,我要新增一条数据。

    2 ,上报:follower 是没有权利进行事务性操作的( 增,删,改,都属于事务性操作 ),follower 把请求上报给 leader 。

    3 ,广播:leader 将新增数据的消息发送给集群中的所有节点。

    4 ,过半数成功原则:如果一半以上的机器新增数据成功,那么就认为数据已经新增成功了,将新增成功的结果发送给接受请求的 follower。

    5 ,响应:follower 告诉 Cleint 客户端,新增成功

      其余的知识点这里就不写了,可以通过下面几篇博客来参考。

    Zookeeper的功能以及工作原理https://www.cnblogs.com/felixzh/p/5869212.html

    ZooKeeper学习第一期---Zookeeper简单介绍https://www.cnblogs.com/sunddenly/p/4033574.html

    zookeeper理论https://www.cnblogs.com/felixzh/p/5873252.html

  • 相关阅读:
    根据时间段查询数据并按照降序排列
    Json数组(以[ ] 中括号开头)字符串转为json对象
    Java 后台请求第三方系统接口详解
    Map 集合 和 String 字符串相互转换工具类
    并发工具类——CountDownLatch、CyclicBarrier、Semaphore与Exchanger
    AQS相关
    Atomic原子类
    CAS相关
    synchronized关键字相关
    谈谈对volatile关键字的理解
  • 原文地址:https://www.cnblogs.com/chenchaochao034/p/11255118.html
Copyright © 2011-2022 走看看