• Kafka与Zookeeper


    Zookeeper

    Zookeeper是一个高性能分布式应用协调服务

    Naming Service

    》配置管理

    Leader Election

    》服务发现

    》同步

    Group Service

    Barrier

    》分布式队列(其实zookeeper并不适合作为分布式队列,性能不高只不过在特定场合可以)

    》两阶段提交

    Zookeeper工作方式

    Zookeeper集群包含一个1个Leader,多个Follower

    》所有的Follower都可提供读服务

    》所有的写操作都会被forward到Leader

    Client与Server通过NIO通信

    》全局串行化所有的写操作

    》保证同一客户端的指令被FIFO执行

    》保证消息通知的FIFO

    Kafka读写操作不一样,Kafka只有Leader提供读写操作。

    Zab协议-广播模式

    客户端每发送一个更新请求,ZooKeeper都会生成一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序,这个唯一编号就是事务ID(ZXID),只有更新请求才算是事务请求。
    为保证按照事务的ZXID先后顺序来处理,Leader服务器会分别为每个Follower服务器创建一个队列,并将事务的先后顺序放入队列中,并按照FIFO的策略进行消息发送。收到需要处理的事务后,Follower服务器会首先以事务日志的形式写入服务器的磁盘中,写入成功后会向Leader服务器发送ACK响应。当Leader服务器收到超过一半的Follower服务器的ACK响应后,会向所有Follower服务器广播Commit消息,收到Commit消息的Follower服务器也会完成对事务的提交。
    如果接收到事务请求的是Follower服务器,它会将请求转发给Leader服务器处理。

    Zab协议-恢复模式

    进入恢复模式:当Leader宕机或者丢失大多数Follower后,即进入恢复模式

    结束恢复模式:新领导被选举出来,且大多数Follower完成了与Leader的状态同步后,恢复模式即结束,从而进入广播模式

    恢复模式的意义

    》发现集群中被commit的proposal的最大zxid

    》建立新的epoch,从而保证之前的Leader不能再commit新的proposal

     

    》集群中大部分节点都commit过前一个Leader commit过的信息,而新的Leader是被大部分节点所支持的,所以被之前Leader commit过的Proposal不会丢失,至少被一个节点所保存

    》新Leader会与所有Follower通信,从而保证大部分节点都拥有最新的数据

     

     

     

    Zookeeper一致性保证

    顺序一致性:从一个客户端发出的更新操作会发送顺序被顺序执行

    原子性:更新操作要么成功要么失败,无中间状态

    单一系统镜像:一个客户端只会看到同一个view,无论它连到哪台服务器

    可靠性:

    》一旦一个更新被应用,该更新将被持久化,直到有客户端更新该结果

    》如果一个客户端得到更新成功的状态码,则该更新一定生效

    》任何一个被客户端通过读或者更新“看到”的结果,将不会被回滚,即使是从失败中恢复

    实时性:保证客户端可在一定时间(通常是几十秒)内看到最新的视图

     

    Zookeeper使用注意事项

    》只保证同一客户端的单一系统镜像,并不保证多个不同客户端在同一时刻一定看到同一系统镜像,如果要实现这种效果,需要在读取数据之前调用sync操作

    Zookeeper读性能好于写性能,因为任何Server均可提供读服务,而只有Leader可提供写服务

    》为了保证Zookeeper本身的Leader Election顺利进行,通常将Server设置为奇数

    》若需容忍f个Server的失败,必须保证有2f+1个以上的Server

  • 相关阅读:
    那些你不知道的项目管理细节(四)—需求阶段的意识
    poj 3253 Fence Repair (STL优先队列)
    “大型票务系统”和“实物电商系统”在不能提供商品(服务)时给消费者带来的影响有巨大差异
    is和as在类型转换时的性能差异
    html5 5个重要特性
    xHTML与HTML的写法有什么不同?
    C++设计模式实现--訪问者(Visitor)模式
    开源,我的一些行动
    自写图片遮罩层放大功能jquery插件源代码,photobox.js 1.0版,不兼容IE6
    03004_SQL语句
  • 原文地址:https://www.cnblogs.com/WardSea/p/7400739.html
Copyright © 2020-2023  润新知