写数据原理
写流程直接请求发送给Leader节点
这里假设集群中有三个zookeeper服务端
ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。 表示发来的数据已确认接收无误。 在TCP/IP协议中,如果接收方成功的接收到数据,那么会回复一个ACK数据。 通常ACK信号有自己固定的格式,长度大小,由接收方回复给发送方。
步骤 | Leader | follower-1号 | follower-2号 |
---|---|---|---|
1 | 首先接受到写请求,然后写数据到leader中 | ||
2 | leader会通知对应的follower,让他写相应的数据 | ||
3 | 这里follower-1号在写完数据的时候会给leader返回一次ack告诉leader写完了.这里ZooKeeper的机制是当数据已有半数以上的写入那么leader服务端(这里是因为写入请求请求的leader)就可以给客户端进行(ack)应答,告诉客户端我的数据已经写好了 | ||
4 | 即使leader已经应答了客户端,但是这里leader依旧会通知其他没有写入数据的follower进行数据的写入 | ||
5 | 当follow-2号写完数据时也会给leader返回一次ack,告诉leader他写完了 |
写流程直接请求发送给Follower节点
这里依旧假设集群中有三个zookeeper服务端
步骤 | Leader | follower-1号 | follower-2号 |
---|---|---|---|
1 | 首先接受到写请求,因为follower没有写权限所以需要把写(write)请求交给leader进行处理 | ||
2 | leader接受到follower-1号写请求,然后写数据到leader中 | ||
3 | leader会通知对应的follower,让他写相应的数据 | ||
4 | 这里follower-1号在写完数据的时候会给leader返回一次ack告诉leader写完了.这里ZooKeeper的机制是当数据已有半数以上的写入,那么leader服务端这里需要对follower-1号进行应答,因为是follower-1号先接受到的客户端传来的写请求 | ||
这里follower-1号接收到了,leader传过来的已经达到了半数的应答.就可以给客户端进行(ack)应答,告诉客户端我的数据已经写好了.这里不是leader去做应答给客户端是因为客户端请求的是follower-1号 | |||
5 | 即使follower-1号已经应答了客户端,但是这里leader依旧会通知其他没有写入数据的follower进行数据的写入 | ||
6 | 当follow-2号写完数据时也会给leader返回一次ack,告诉leader他写完了 |
其他ZooKeeper文章
ZooKeeper学习笔记(一): ZooKeeper是什么能用来做什么
ZooKeeper学习笔记(二): Zookeeper的安装与启动(Docker)
ZooKeeper学习笔记(三): Zookeeper的五大参数解读
ZooKeeper学习笔记(四): Docker搭建ZooKeeper集群(这里是三个,具体可以修改对应参数)脚本
ZooKeeper学习笔记(五): ZooKeeper集群选举机制
ZooKeeper学习笔记(六): 客户端命令行操作
ZooKeeper学习笔记(七):ZooKeeper依赖-API方法
ZooKeeper学习笔记(八):服务器动态上下线原理