【️Zookeeper是CP还是AP的?】

在这里插入图片描述

😊引言

🎖️本篇博文约3000字,阅读大约10分钟,亲爱的读者,如果本博文对您有帮助,欢迎点赞关注!😊😊😊

🖥️Zookeeper是CP还是AP的?

  • ✅Zookeeper是CP还是AP
  • ✅ 拓展知识仓
    • ✅如何保证真正的强一致性?

✅Zookeeper是CP还是AP

ZooKeeper作为分布式协调服务,它的职责是保证数据(注: 配置数据,状态数据)在其管辖下的所有服务之间保持同步、一致。所以,我们可以认为Zookeeper是一个CP的分布式系统。所以他会牺牲可用性,也就是在极端环境下,ZooKeeper可能会丢弃一些请求,消费者程序需要重新请求才能获得结果。

而且,作为ZooKeeper的核心实现算法 Zab,就是解决了分布式系统下数据如何在多个服务之间保持同步问题的。

如果 ZooKeeper下所有节点都断开了,或者集群中出现了网络分割的故障(注: 由于交换机故障导致交换机底下的子网间不能互访;那么ZooKeeper 会将它们都从自己管理范围中剔除出去,外界就不能访问到这些节点了,即便这些节点本身是“健康”的,可以正常提供服务的:所以导致到达这些节点的服务请求被丢失了。

但是,请一定要注意,这里面的一致性,他确实是强一致性,但是,Zookeeper保证的是强一致性模型中的顺序一致性而不是线性一致性。(这个很少有人提)

博主的博文链接: 什么是分布式系统的一致性?

这一点在ZK的官网( Zookeeper)上明确的说过:

在这里插入图片描述
这里明确的提了,Zookeeper是保证的顺序一致性,也就是说,ZooKeeper不保证在每个时间点,两个不同的客户端将具有相同的ZooKeeper数据视图。但是他能保证我们在每人节点上读取到的一定是他最后一次更新的内容。

具体的案例就是,当Zookeeper在进行数据同步的过程中,如果半数节点同步成功,它就提交当前事务,但此时集群内还有可能有节点没有同步到数据,如果此时读请求发送到没有同步到数据的节点,那么就会读到旧的数据。

但是Zookeeper是会保证这个节点最终也会按照顺序执行成功的。

📝📝📝下面是如何在ZooKeeper客户端中使用ZooKeeper API来实现创建一个顺序节点Demo

  
import org.apache.zookeeper.*;  /*** @author 昕宝爸爸爱编程*/
public class ZooKeeperDemo {  // 定义ZooKeeper连接字符串  private static final String CONNECT_STRING = "localhost:2181";  // 定义会话超时时间  private static final int SESSION_TIMEOUT = 5000;  // 定义ZooKeeper对象  private ZooKeeper zooKeeper;  // 连接ZooKeeper服务  public void connect() throws IOException, InterruptedException {  zooKeeper = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, new Watcher() {  @Override  public void process(WatchedEvent event) {  System.out.println("Receive watched event:" + event);  }  });  System.out.println("ZooKeeper connection established.");  }  // 创建顺序节点  public void createSequentialZNode() throws KeeperException, InterruptedException {  // 定义节点路径,以"/sequentialNode-"开头,会自动添加递增的计数器保证顺序一致性  String path = "/sequentialNode-";  // 创建节点,返回创建的节点路径  String createdPath = zooKeeper.create(path, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);  System.out.println("Created sequential znode: " + createdPath);  }  // 主函数,执行连接和创建节点的操作  public static void main(String[] args) throws IOException, InterruptedException, KeeperException {  ZooKeeperDemo demo = new ZooKeeperDemo();  demo.connect();  demo.createSequentialZNode();  }  
}

首先连接到ZooKeeper服务,然后创建一个顺序的、临时的znode。create方法的CreateMode.EPHEMERAL_SEQUENTIAL参数告诉ZooKeeper创建一个顺序的、临时的znode。在这个znode的名字后面,ZooKeeper会自动添加一个唯一的、递增的计数器,以保证顺序一致性。

✅ 拓展知识仓

✅如何保证真正的强一致性?


想要让Zookeeper真正的保证强一致性,或者说保证线性一致性也是有办法的,那就是通过sync命令。



当我们对一个Follower调用sync命令的时候,会使得他和Leader节点进行数据同步,并等待服务器同步完成之后再返回。这样下一次的read就能保证拿到的是最新数据了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/278350.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

教育数字化转型 赋能家庭场景自主学习习惯养成

北京市气象台12月12日22时升级发布暴雪橙色预警信号,北京市教委决定自12月13日开始,全市中小学幼儿园采取学生临时居家学习措施。自疫情以来,家庭已经成为另一个学习中心,学校不再是教育的孤岛。 学习方式的变革,数字…

结构体概念及应用

1.结构体类型的概念 在C语言中提供了很多基本的数据类型,但在实际开发中,无法满足程序中各种复杂数据的要求。有时需要将不同类型的数据组合成一个有机的整体,一边引用。例如: numnamesexagescore001lemonF18 90 在图中列举了…

R语言piecewiseSEM结构方程模型在生态环境领域实践技术

结构方程模型(Sructural Equation Modeling,SEM)可分析系统内变量间的相互关系,并通过图形化方式清晰展示系统中多变量因果关系网,具有强大的数据分析功能和广泛的适用性,是近年来生态、进化、环境、地学、…

SpringBoot接入企微机器人

1、企业微信创建机器人(如何创建不懂的请自行百度,很简单的),成功后能获取到一个Webhook地址:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa 2、创建一个SpringBoot项…

【Hive】——DDL(PARTITION)

1 增加分区 1.1 添加一个分区 ALTER TABLE t_user_province ADD PARTITION (provinceBJ) location/user/hive/warehouse/test.db/t_user_province/provinceBJ;必须自己把数据加载到增加的分区中 hive不会帮你添加 1.2 一次添加多个分区 ALTER TABLE table_name ADD PARTITION…

OpenHarmony关于修改系统横屏导致启动视频显示不全问题解决

前言 OpenHarmony源码版本:4.0release 开发板:DAYU / rk3568 前段时间写的设置OpenHarmony启动视频,在竖屏状态下是正常的,但是横屏状态下显示不全。 链接直达:OpenHarmony 设备启动Logo和启动视频替换指南-CSDN博…

【专题】树和二叉树的转换

目录 一、树转换成二叉树步骤一:加线——在兄弟之间加连线步骤二:抹线——除结点的左孩子外,去除其与其余孩子之间的关系步骤三:旋转——以树的根结点为轴心,将整树顺时针转45 二、二叉树转换成树步骤1:加线…

【setDS】牛客小白月赛83 E

登录—专业IT笔试面试备考平台_牛客网 题意 思路 首先,一个必要步骤是把它转化为两个序列,这样就变成了一个序列DS问题 我们的答案是一个位置 pos 后面还有多少位置和这个位置的颜色相同,考虑得到这个答案我们需要维护什么东西 我们只需要…

MongoDB 与 Python 的交互

文章目录 第1关:MongoDB 与 Python 的交互 第1关:MongoDB 与 Python 的交互 编程要求 根据提示,在右侧编辑器 Begin-End 处补充代码,完成右侧程序。 测试说明 点击评测,平台会对你编写的代码进行测试。 import pymo…

AI日报:OpenAI向新用户重新开放ChatGPT Plus订阅

欢迎订阅专栏 《AI日报》 获取人工智能邻域最新资讯 文章目录 总览Chatgptplus重新开放订阅#暂停原因功能 OpenAI的1000万美元安全人工智能拨款拨款初衷学术捐赠 总览 ChatGPT Plus再次向新用户开放,但目前每三小时限制发送40条消息。 OpenAI还宣布拨款1000万美元…

【Hive】——DDL(TABLE)

1 查询指定表的元数据信息 如果指定了EXTENDED关键字,则它将以Thrift序列化形式显示表的所有元数据。 如果指定了FORMATTED关键字,则它将以表格格式显示元数据。 describe formatted student;2 删除表 如果已配置垃圾桶且未指定PURGE&…

ToolLLM model 以及LangChain AutoGPT Xagent在调用外部工具Tools的表现对比浅析

文章主要谈及主流ToolLLM 以及高口碑Agent 在调用Tools上的一些对比,框架先上,内容会不断丰富与更新。 第一部分,ToolLLM model 先来说主打Function Call 的大模型们 OpenAI GPT 宇宙第一LLM,它的functionCall都知道&#xff0…