首页 > 其他分享 >简单理解Zookeeper之数据同步机制

简单理解Zookeeper之数据同步机制

时间:2024-05-28 15:02:54浏览次数:17  
标签:事务 同步 请求 Zookeeper Leader Follower 理解 操作 节点

写入数据流程

请求发给Leader

  1. client向Zookeeper集群的Leader节点发送写请求

  2. Leader节点接收到写请求后,会对请求进行预处理,并为这次写操作分配一个全局唯一的递增ID(ZXID)。

  3. Leader将这个写请求(提案)广播给所有的Follower节点。这个提案包含了请求的具体内容和分配的ZXID。每个Follower节点在接收到提案后,会将其写入到本地的事务日志中,并向Leader回应一个投票(acknowledgment),表示它已经准备好这次更改。

  4. 当Leader收到半数以上的Follower的成功信息,说明写操作可以执行,然后,Leader会向所有Follower节点广播一个提交消息,指示它们可以将这个写操作应用到自己的状态机中了。Follower节点收到提交消息后,会将之前写入事务日志的提案应用到自己的状态机中,完成数据的更改。

  5. 一旦写操作被成功应用,Leader会向发起请求的客户端发送响应,告知写操作已经完成。

  6. 注意: 此时写操作只是在超过一半的机器中完成了,但是客户端会认为整个写操作都成功了,之后Leader会将没有同步的follower节点数据进行同步.

请求发给Follower

  1. Follower节点接收到客户端的写请求后,并不会直接处理这个请求。

  2. Follower会将这个请求转发给Leader节点。

  3. Leader节点接收到这个写请求后,会对请求进行预处理。这包括为写操作分配一个全局唯一的递增ID(ZXID),然后,Leader将这个写请求(提案)广播给所有的Follower节点,包括最初接收到请求的Follower。这个广播包含了请求的细节和分配的ZXID。

  4. 每个Follower节点在接收到提案后,会将其写入到本地的事务日志中。然后,Follower节点会向Leader发送一个投票(acknowledgment),表示它已经准备好这次更改。

  5. 当Leader收到半数以上的Follower的成功信息,说明写操作可以执行,然后,Leader会向所有Follower节点广播一个提交消息,指示它们可以将这个写操作应用到自己的状态机中了。Follower节点收到提交消息后,会将之前写入事务日志的提案应用到自己的状态机中,完成数据的更改。

  6. 一旦写操作被成功应用,接收请求的follower会向发起请求的客户端发送响应,告知写操作已经完成。

Zookeeper的崩溃恢复机制

已经被处理的消息不能丢失

1,当 Leader 收到超过半数 Follower 的 ACKs 后,就向各个 Follower 广播 COMMIT 消息, 批准各个 Follower 执行该写操作事务。

2,各个 Follower 在接收到 Leader 的 COMMIT 消息后就会在本地执行该写操作,然后会向客户端响应写操作成功。

3,但是如果在非全部 Follower 收到 COMMIT 消息之前 Leader 就挂了,这将导致一种后 果:部分 Follower 已经执行了该事务,而部分 Follower 尚未收到 COMMIT 消息,所以其并没有执行该事务。

4,当新的 Leader 被选举出,集群经过恢复模式后需要保证所有 Follower 上都执行 了那些已经被部分 Follower 执行过的事务。

被丢弃的消息不能再出现

1,新事务在 Leader 上已经通过,其已经将该事务更新到了本地,但所有 Follower 还都没有收到 COMMIT 之前,Leader 宕机了(比前面叙述的宕机更早)

2,此时,所有 Follower 根本 就不知道该 Proposal 的存在。当新的 Leader 选举出来,整个集群进入正常服务状态后,之 前挂了的 Leader 主机重新启动并注册成为了 Follower。

3,那个别人根本不知道的 Proposal 还保留在那个主机,那么其数据就会比其它主机多出了内容,导致整个系统状态的不一致。所以,该 Proposa 应该被丢弃。

4,类似这样应该被丢弃的事务,是不能再次出现在集群中的, 应该被清除。

标签:事务,同步,请求,Zookeeper,Leader,Follower,理解,操作,节点
From: https://blog.csdn.net/m0_63130425/article/details/139183388

相关文章

  • 简单理解Flume之Channel和Sink
    ChannelMemoryChannel1,MemoryChannel将数据临时存储的到内存队列2,属性属性默认值解释capacity100队列容量,默认情况队列中最多临时存储100条数据,实际过程这个值一般被调节成30W~50WtransacCapacity100PutList向Channel发送的数据条数,实际中一般会调节成3000~5000Fil......
  • 简单理解Flume之Source
    SourceAVROSource1,AVROSource监听指定端口,接收被AVRO序列化之后的数据2,结合AVROSink可以实现多级扇入扇出流动a1.sources=s1a1.channels=c1a1.sinks=k1#配置AVROSourcea1.sources.s1.type=avro#要监听的主机名或者IP地址a1.sources.s1.bind=hadoop0......
  • SD8906A恒定批量降压转换器集成电路IC同步整流器SOT封装
    该SD8906A是一个恒定频率,电流模式PWM降压转换器。该器件集成了一个主开关和一个同步整流器,无需外部肖特基二极管即可实现高效率。它是为单节锂离子(Li+)电池供电的便携式设备的理想选择。输出电压可调低至0.6V。该SD8906A还可以运行在100%的低压差操作占空比,延长便携式系统......
  • CDC 数据实时同步入湖的技术、架构和方案(截至2024年5月的现状调研)
    博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维码进入京东手......
  • 如何理解Spring Boot自动配置原理和应用?
    我们知道,基于SpringBoot,我们只需要在类路径中引入一组第三方框架的starter组件,就能在Spring容器中使用这些框架所提供的各项功能。这在当下的开发过程中已经习以为常,但在SpringBoot还没有诞生之前却是不可想象的。如果我们使用传统的Spring框架,那就需要添加各种繁杂的配置信......
  • u-boot启动流程(好难理解啊!!!)
    链接脚本u-boot.lds详解要分析uboot的启动流程,首先要找到“入口”,找到第一行程序在哪里。程序的链接是由链接脚本来决定的,所以通过链接脚本可以找到程序的入口。如果没有编译过uboot的话链接脚本为arch/arm/cpu/u-boot.lds。打开u-boot.lds可以看到下图所示的内容。OU......
  • 如何理解信息隐藏和局部化?
    信息隐藏是指将秘密信息隐藏于可公开的媒体信息中,使人们凭直观的视觉和听觉难以察觉其存在的技术。信息隐藏技术主要关注如何隐藏信息的内容和存在,而不仅仅是内容。信息隐藏技术被广泛应用于军事、情报、政府机要部门等领域,以保护机密信息的安全。局部化是分式环的另一名称,通常......
  • 关于Embedded Resource的理解
    EmbeddedResource.NET中使用外部资源时常用的方式都是使用资源文件,作为程序集的一部分发布。资源文件的读取也比较方便,字符串、图片和任何二进制数据,包括任何类型的文件都可以作为资源的项。使用资源文件时VS也会自动生成相应的方法来获取资源,用xml编辑器打开后缀.resx的文件,......
  • 满帮集团 Eureka 和 ZooKeeper 的上云实践
    作者:胡安祥满帮集团,作为“互联网+物流”的平台型企业,一端承接托运人运货需求,另一端对接货车司机,提升货运物流效率。2021年美股上市,成为数字货运平台上市第一股。根据公司年报,2021年,超过350万货车司机在平台上完成超1.283亿个订单,实现总交易价值GTV2623亿元,占中国数字货......
  • 京准电子 | NTP对时装置(时间同步装置)在电力系统中的重要性
    京准电子|NTP对时装置(时间同步装置)在电力系统中的重要性京准电子|NTP对时装置(时间同步装置)在电力系统中的重要性京准电子科技官微——ahjzsz 引言 对于一个进入信息社会的现代化大国,导航定位和授时时钟系统是最重要的,而且也是最关键的国家基础设施之一。精密时钟是科学......