首先要声明一点,zk集群中,leader服务器有着比较重要的存在,Follower 服务器只是处理非事务性请求,leader服务器主要负责事务性请求,Follower 服务器在遇到事务性请求以后还是会转发给leader服务器处理,所以整个集群的性能就收到leader服务器性能的影响,这也是zk设计时的一个弊端。

既然leader服务器处理事务性请求,必然会造成数据变更,但是对外提供的服务器并没有数据变更,所以这里分布式系统中必然会有zk集群的数据同步,要不然数据就不一致了。同步的过程如下

同步条件是指在 ZooKeeper 集群中何时触发数据同步的机制。要想进行集群中的数据同步,首先需要 ZooKeeper 集群中存在用来进行数据同步的 Learning 服务器。 也就是说,当 ZooKeeper 集群中选举出 Leader 节点后,除了被选举为 Leader 的服务器,其他服务器都作为 Learnning 服务器,并向 Leader 服务器注册。之后系统就进入到数据同步的过程中。

Leader 的事务性的会话请求会被同步,

同步方式如下

DIFF 同步

DIFF 同步即差异化同步的方式,首先会向该 Learnning 服务器发送一个 DIFF 不同指令。在收到该条指令后,Learnning 服务器会进行差异化方式的数据同步操作。在这个过程中,Leader 服务器会将一些 Proposal(事务请求) 发送给 Learnning 服务器。之后 Learnning 服务器在接收到来自 Leader 服务器的 commit 命令后执行数据持久化的操作。

TRUNC+DIFF 同步

TRUNC+DIFF 同步代表先回滚再执行差异化的同步,这种方式一般发生在 Learnning 服务器上存在一条事务性的操作日志,但在集群中的 Leader 服务器上并不存在的情况 。发生这种情况的原因可能是 Leader 服务器已经将事务记录到本地事务日志中,但没有成功发起 Proposal 流程。当这种问题产生的时候,ZooKeeper 集群会首先进行回滚操作,在 Learning 服务器上的数据回滚到与 Leader 服务器上的数据一致的状态后,再进行 DIFF 方式的数据同步操作。

TRUNC 同步

TRUNC 同步是指仅回滚操作,就是将 Learnning 服务器上的操作日志数据回滚到与 Leader 服务器上的操作日志数据一致的状态下。之后并不进行 DIFF 方式的数据同步操作。

SNAP 同步

SNAP 同步的意思是全量同步,是将 Leader 服务器内存中的数据全部同步给 Learnning 服务器。在进行全量同步的过程中,Leader 服务器首先会向 ZooKeeper 集群中的 Learning 服务器发送一个 SNAP 命令,在接收到 SNAP 命令后, ZooKeeper 集群中的 Learning 服务器开始进行全量同步的操作。随后,Leader 服务器会从内存数据库中获取到全量数据节点和会话超时时间记录器,将他们序列化后传输给 Learnning 服务器。Learnning 服务器接收到该全量数据后,会对其反序列化后载入到内存数据库中。

此方法会判断是那种同步方式最后,最后会将请求放入packetsNotCommitted.add(pif); list中,

最后会用此方法进行数据变更操作。

集群没有leader_ZooKeeper 集群中 Leader 与 Follower 的4种数据同步策略相关推荐

  1. Apache ZooKeeper - ZooKeeper 集群中 Leader 与 Follower 的数据同步策略

    文章目录 流程图 why ? How ? 何时触发数据同步的机制? 同步哪些数据 同步方式 DIFF 同步 TRUNC+DIFF 同步 TRUNC 同步 SNAP 同步 同步后的处理 源码分析 流程图 ...

  2. kafka中leader和follower、AR、ISR、OSR、Controller的选举、为什么不能通过ZK的方式来选举partition的leader?

    leader和follower 在Kafka中,每个topic都可以配置多个分区以及多个副本.每个分区都有一个leader以及0个或者多个follower,在创建topic时,Kafka会将每个分区的 ...

  3. kafka中副本数据同步策略 ,acknowledge的发送策略,kafka的数据可靠性保证

    ack(acknowledge)简介 为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的消息后,都需要向producer发送 ...

  4. 不懂就问:ZooKeeper 集群如何进行数据同步?

    本文作者:HelloGitHub-老荀 Hi,这里是 HelloGitHub 推出的 HelloZooKeeper 系列,免费开源.有趣.入门级的 ZooKeeper 教程,面向有编程基础的新手. 项 ...

  5. mysql副本集_mongodb分片+副本集总览

    由于51cto的编辑不太好用,这是有道上的文档http://note.youdao.com/noteshare?id=aedd53c99b4a97aebbe9af136104113a 在 MongoD ...

  6. Zookeeper——选举机制原理与Leader和Follower作用

    摘要 本博文主要介绍Zookeeper的选举机制的原理与Zookeeper事务请求处理的原理. 一.zookeeper选举算法原理 Leader 服务器的作用是管理 ZooKeeper 集群中的其他服 ...

  7. 在Scrapy中如何利用Xpath选择器从HTML中提取目标信息(两种方式)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 坚定,严谨,勤奋,开拓 前一阵子我 ...

  8. 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据

    前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于"父子组件通信"的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰 ...

  9. Apache ZooKeeper - 集群中 Leader 的作用_事务的请求处理与调度分析

    文章目录 事务性请求处理 Leader 事务处理分析 预处理阶段 事务处理阶段 事务执行阶段 响应阶段 源码分析 小结 Leader 服务器在 ZooKeeper 中的作主要是处理事务性的会话请求以及 ...

最新文章

  1. Linux常用下载软件
  2. 项目如何用jetty运行_阿里大牛教你如何用Dubbox+SpringBoot+Docker架构,实现双11项目...
  3. 几维安全Javascript代码混淆(js加密)在线使用说明
  4. android 静态编译链接,Android NDK:使用预编译的静态库链接
  5. git 创建webpack项目_从 0 开始构建 webpack 项目【Webpack Book 翻译】
  6. viso stido 在图上写字
  7. matlab制作强光效果代码,自己动手做一个雷达PPI显示器的动态效果图(附Matlab代码)...
  8. 线性代数-坐标系变换
  9. docker学习-运行第一个docker镜像hello world
  10. 活字格企业Web应用生成器V3.0发布更新,支持插件管理和多人协作开发
  11. mate20pro换鸿蒙系统,鸿蒙2.0下载
  12. 汉字编码,GB2312、GB 13000、GBK、GB18030 介绍
  13. bzoj 1921: [Ctsc2010]珠宝商
  14. 佳能(数码相机)SDK使用记录
  15. 贵州省 建筑标准规范 合集
  16. Office办公自动化全套视频
  17. matlab 硬件驱动,基于MATLAB的驱动电路硬件仿真与研究
  18. DeepLearn学习步骤
  19. Android SO逆向-对象的构造函数与析构函数
  20. 关于软件测试的一些基本知识

热门文章

  1. 工业以太网交换机出现温度过高如何处理?
  2. 【渝粤题库】陕西师范大学200751 《操作系统》作业
  3. 渝粤教育 陕西师范大学 《学前儿童健康教育》作业
  4. 标签蛋白_His标签蛋白镍柱纯化后总有一条杂带怎么办?
  5. linux 安装mongodb 64,在CentOS 6.x 64bit上安装MongoDB 3.2社区版
  6. java 代码造假_老板居然让我在Java项目中“造假”
  7. OFFICE2019精简安装D盘(包括Word、PPT、Excel,可根据需要调整)+VISIO2019+Mathtype7.4.0完美下载安装教程
  8. Java基本语法(6)--算术运算符
  9. 无锡太湖学院计算机科学与技术宿舍,无锡太湖学院宿舍条件,宿舍环境图片(10篇)...
  10. 重温1 Android系统架构及版本