当前位置: 首页 > news >正文

01,大数据总结,zookeeper

1 ,zookeeper :概述

1.1,zookeeper:作用

1 ,大数据领域 :存储配置数据
 
  例如:hadoop 的 ha 配置信息,hbase 的配置信息,都存储在 zookeeper
 
2 ,应用领域 :分布式锁
 
  分布式锁,虽然 zk 也能做,但是更加推荐使用 redis ,更合适。

1.2,zookeeper:开发 - java

java 语言开发的。

1.3,qps :10w

1 ,3 台主机的 zk 集群,qps 可以达到 :10w 左右。

1.4 ,zk 会脑裂吗 :

不会

1.5,推荐 :很好的文章

https://blog.csdn.net/qq_37555071/article/details/114609145?ops_request_misc=%257B%2522request%255Fid%2522%253A%25221EFE1594-87AD-4F31-8393-3111ECF369D5%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=1EFE1594-87AD-4F31-8393-3111ECF369D5&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-114609145-null-null.142^v100^pc_search_result_base4&utm_term=zookeeper%20zxid&spm=1018.2226.3001.4187

2 ,zookeeper :架构

2.1,架构图 :

在这里插入图片描述

2.2,leader :主节点

1 ,角色 :
 
  集群的主节点
 
2 ,作用 :
 
  1 ,处理客户端请求 :读,写。
 
  2 ,服务器内部 :调度者,将写请求,发送给每个系节点。
 
  3 ,事务:保证事务处理的有序性。

2.2,follower :从节点

1 ,角色 :
 
  集群的从节点
 
2 ,作用 :
 
  1 ,处理客户端请求 :读。
 
  2 ,写请求 :转发给 leader 处理。
 
  3 ,选举:leader 挂了,follower 要参与 leader 选举。
 
  4 ,存储:leader 存储数据的时候,需要每个从节点,根据leader提议,在本地存储数据。

2.3,observer :观察者节点

1 ,角色 :
 
  集群的从节点
 
2 ,作用 :
 
  1 ,处理客户端请求 :读。
 
  2 ,写请求 :转发给 leader 处理。
 
  3 ,选举:不参与
 
  4 ,同步:从主节点同步数据。

3 ,zookeeper :数据处理

3.1,最终一致性 :

意义 :数据同步不及时,但是最终,数据是一致的。

3.2,获取 :最新数据

1 ,由于 :
 
  zookeeper 的数据更新,不及时。
 
2 ,client 想获取最新数据,需要在读取数据前,先调用这个接口 :
 
  sync()
 
3 ,sync() 作用 :
 
  1 ,目的 :client 连接的当前从节点,向 leader 发请求,需要同步最新数据。
 
  2 ,leader 响应 :如果没有心数据,直接返回响应【Leader.SYNC】
 
    如果有新数据,需要处理完最新数据,才返回响应【Leader.SYNC】,从节点收到响应后,将最新数据,返回给 client 。

3.3,数据操作 :写入流程,leader

1 ,leader 接收请求
 
2 ,leader 发送 proposal 给 follower
 
3 ,follower 收到请求记录 txlog、snapshot、
 
4 ,follower 发送 ack 给 leader
 
5 ,commit :leader 收到 ack 后进行 commit,并且通知所有的【follower,observer】
 
6 ,leader 返回成功给客户端

3.4,数据操作 :写入流程,follower

1 ,follower 接受请求,解析请求。
 
2 ,转发 :follower 将写请求转发给 leader
 
3 ,leader接收请求
 
4 ,leader 发送 proposal 给 follower
 
5 ,follower 收到请求记录 txlog、snapshot、
 
6 ,follower 发送 ack 给 leader
 
7 ,commit :leader 收到 ack 后进行 commit,并且通知所有的【follower,observer】
 
8 ,follower 返回成功给客户端。

3.5,数据操作 :写入流程,observer

1 ,observer 接受请求,解析请求。
 
2 ,转发 :observer 将写请求转发给 leader
 
3 ,leader接收请求
 
4 ,leader 发送 proposal 给 follower
 
5 ,follower 收到请求记录 txlog、snapshot、
 
6 ,follower 发送 ack 给 leader
 
7 ,commit :leader 收到 ack 后进行 commit,并且通知所有的【follower,observer】
 
8 ,observer 返回成功给客户端。

3.6,数据操作 :写入流程,注意

1 ,leader 发送 proprsal 决议 :
 
  只给 follower 发送

3.7,数据存储 :内存 + 磁盘

1 ,内存数据 :
 
  1 ,数据结构 :3 种
    
    DataNode :数据节点,最小单元,存储数据
    
    DataTree :树形结构中的节点,是 map [ path , node ]
    
         临时节点,也是 map [ sessionId , node ]
    
    ZKDataBase :内存数据库,管理所有会话和数据。
    
           定期备份 :定时的将内存数据,同步到磁盘。
           
           zk 重启 :从磁盘恢复数据到内存。
 
2 ,磁盘数据 :快照
 
  定期快照
 
3 ,磁盘数据 :日志
 
  每个请求,都会立刻产生日志流水

3.8,快照 :步骤

1 ,目的 :将所有数据,一次性,同步到磁盘
 
2 ,检查 :每进行一次事务日志记录之后,Zookeeper都会检测当前是否需要进行数据快照。
 
3 ,快照注意 :尽量避免 Zookeeper 集群中的所有机器在同一时刻进行数据快照。
 
4 ,快照时机 :
  
  1 ,10w 个事务性日志流水
  
  2 ,事务文件大小 :4g
 
5 ,异步线程:创建单独的异步线程来进行数据快照以避免影响Zookeeper主流程。
  
6 ,快照数据文件名:Zookeeper根据当前已经提交的最大ZXID来生成数据快照文件名。
  
7 ,数据序列化:首先序列化文件头信息,然后再对会话信息和 DataTree 分别进行序列化,同时生成一个Checksum,一并写入快照数据文件中去。

3.9,事务 :zxid

1 ,事务提交流程 :
 
  1 ,初始化:当一个节点收到一个事务请求时,它会将事务请求发送给Leader。
  
  2 ,提交:Leader会将事务请求发送给其他节点,并等待其他节点的确认。
  
  3 ,确认:当其他节点收到事务请求后,它们会对事务进行处理,并将处理结果发送回Leader。
  
  4 ,完成:当Leader收到足够多的确认后,它会将事务提交完成。
  
2 ,zxid :
  
  1 ,类型 :long
  
  2 ,意义 :每个事务操作,成功后,zxid 自增 1

4 ,zookeeper :数据 - znode

4.1,数据结构 :树形结构

zookeeper 数据存储在树形结构上

4.2,znode :数据节点

1 ,znode 节点 :
 
  存储数据 :例如,abcde
 
  路径 :例如,/a/b/c/d

4.3,znode :数据大小 - 1m

每个 znode ,只能存储最多 1m 数据

4.4,znode :版本号,乐观锁

1 ,znode 数据 :有版本号的
 
  1 ,目的 :乐观锁,防止多线程的误操作
  
  2 ,以下操作 :需要附加版本号
 
    setData:更新znode的数据
    
    delete:删除指定znode
 
    checkExists:检查指定znode是否存在
 
    getChildren:获取指定znode的子节点列表
 
    getData:获取指定 znode 的数据
 
2 ,乐观锁 :
 
  1 ,效果 :谁先抢到数据的版本号,就让版本号 +1 ,其它线程,版本号不对,操作失败。
 
  2 ,性能 :比悲观锁,快
  
  3 ,为什么快 :尽早发现自己版本号不对,尽早做别的决策

4.4,znode :watcher - 观察者

1 ,可监听的事件 :4 种
 
  节点创建
 
  节点删除
 
  节点数据改变
 
  节点的子节点列表发生变更。
 
2 ,监听器 :特点
 
  1 ,一次性 :每次注册监听器,只能粗发一次
 
  2 ,触发机制 :回调函数。
 
  3 ,通知顺序 :按照监听器的注册顺序,依次触发。
 
  4 ,修改触发 :版本号,不看数据内容,只看数据版本。

4.5,znode :节点类型

1 ,持久节点(PERSISTENT)
  
  存储 :普通数据
  
2 ,持久顺序节点(PERSISTENT_SEQUENTIAL)
 
  存储 :序列自增数据
 
3 ,临时节点(EPHEMERAL)
 
  存储临时,普通数据
 
4 ,临时顺序节点(EPHEMERAL_SEQUENTIAL)
 
  存储临时,序列自增数据

5 ,zookeeper 应用 :分布式锁

5.1 ,目的 :多线程,保护数据

1 ,例如 :mysql 的某个数据的操作,只能有一个系统访问,但是,有多个系统,都在使用 mysql ,怎么办 ?
 
2 ,操作步骤 :
  
  1 ,选择路径 :例如 /app/kd/qcs
  
    意义 :将多个线程,创建的节点,都放这里
  
  2 ,创建 :临时顺序节点
  
    意义 :每个线程都创建一个节点,这些节点,序号自增
  
    效果 :/app/kd/qcs/lock_00000001
       /app/kd/qcs/lock_00000002
       /app/kd/qcs/lock_00000003
        
  3 ,获取锁 :
    
    序列编号最小的,得到锁。
  
  4 ,注册监听 :
    
    其它节点,注册监听事件,监听比他小 1 的节点,消失事件。
  
  5 ,释放锁 :
  
    边界代码【线程安全部分】执行结束,删除临时节点,释放锁。
  
    触发 :watcher 事件,下一个线程,执行监听逻辑。
  
  6 ,下一个线程 :获取锁
  
    检查编号,我是不是最小的,如果是,我开始执行代码。

相关文章:

01,大数据总结,zookeeper

1 ,zookeeper :概述 1.1,zookeeper:作用 1 ,大数据领域 :存储配置数据   例如:hadoop 的 ha 配置信息,hbase 的配置信息,都存储在 zookeeper 2 ,应用领…...

伪工厂模式制造敌人

实现效果 1.敌人方实现 敌人代码 using UnityEngine; using UnityEngine.UI;public class EnemyBasics : MonoBehaviour {public int EnemySpeed { get; internal set; }public int EnemyAttackDistance { get; internal set; }public int EnemyChaseDistance { get; interna…...

【linux】pwd命令

pwd 命令在 Linux 和类 Unix 系统中用于显示当前工作目录的完整路径。它是 "print working directory" 的缩写。 当你在终端或命令行界面中工作时,你可能会在不同的目录(或文件夹)之间切换。pwd 命令帮助你确定你当前位于哪个目录…...

Python 如何封装工具类方法,以及使用md5加密

第一步:封装使用方法 在utils目录中,编写我的md5加密的方法,如下: import re import hashlib from os import path from typing import Callable from flask import current_app# 这里封装的是工具类的方法def basename(filenam…...

网络编程的应用

目录 1.单机程序和网络程序 2.客户端与服务端 3.网络编程三要素 3.1 IP地址 3.2 port端口 4.TCP编程 5.UDP编程 1.单机程序和网络程序 之前编写的程序都是单机程序,所有的业务功能实现及数据存储都在一个主机上完成,我们称为单机程序 我们在生活…...

佰朔资本:国内海风加速招标 船舶行业景气上行

昨日,沪指盘中一度下探失守2700点,尾盘在地产、银行等板块的带动下发力上扬,深证成指亦翻红。到收盘,沪指涨0.49%报2717.28点,深证成指涨0.11%报7992.25点,创业板指跌0.11%报1533.47点,上证50指…...

理解AAC和Opus的编码与解码流程

理解AAC和Opus的编码与解码流程及其在Android中的实现,对于音频开发非常重要。下面,我将详细解释这两种编码格式的原理、流程,并结合具体代码示例,帮助你在Android项目中合理地设计和使用它们。 一、AAC(Advanced Audio Coding) 1. AAC的原理与流程 AAC是一种有损音频压…...

设计图纸加密方法知多少?小编给你讲清楚

一、对称加密 使用对称加密算法,对设计图纸进行加密。对称加密使用相同的密钥进行加密和解密,确保只有持有正确密钥的人能够解密文件。 二、非对称加密 使用非对称加密算法,进行设计图纸的加密。非对称加密使用公钥加密、私钥解密的方式&a…...

pycv实时目标检测快速实现

使用python_cv实现目标实时检测 python 安装依赖核心代码快速使用实现结果展示enjoy python 安装依赖 opencv_python4.7.0.72 pandas1.5.3 tensorflow2.11.0 tensorflow_hub0.13.0 tensorflow_intel2.11.0 numpy1.23.5核心代码快速使用 # 使用了TensorFlow Hub和OpenCV库来实…...

记录下如何让字体在div内 自动换行 上下居中

div内样式 display: flex; // flex布局 justify-content: center; // 上下居中 align-items: center; // 左右居中 overflow-wrap: break-word; // 允许字体换行 (若行内的单词无法放下则换行) word-break: break-all; // 强制文本在任意字符间进…...

Shell篇之编写MySQL启动脚本

Shell篇之编写MySQL启动脚本 1. 脚本内容 vim mysql_ctl.sh#!/bin/bashmysql_port3306 mysql_username"root" mysql_password"molinker" mysql_conf"/opt/lanmp/mysql/etc/my.cnf" mysql_sock"/opt/lanmp/mysql/var/mysql.sock"func…...

supermap Iclient3d for cesium加载地形并夸大地形

先看效果图 这是没有夸张之前的都江堰 这是夸大五倍后的都江堰 下面展示代码 主要就是加载supermaponline的skt地形然后夸大 <template><div class"PartOneBox"><div id"cesiumContainer"></div></div> </template>…...

一文解读OLAP的工具和应用软件

OLAP&#xff08;OnlineAnalyticalProcessing&#xff09;是一种用于快速分析大规模、多维度数据的方法。OLAP工具和应用软件则是帮助人们进行OLAP分析的重要工具。本文将介绍几种常见的OLAP工具和应用软件&#xff0c;并探讨它们在数据分析中的作用。 一 OLAP工具的分类 在选…...

xml重点笔记(尚学堂 3h)

XML:可扩展标记语言 主要内容(了解即可) 1.XML介绍 2.DTD 3.XSD 4.DOM解析 6.SAX解析 学习目标 一. XML介绍 1.简介 XML(Extensible Markup Language) 可扩展标记语言&#xff0c;严格区分大小写 2.XML和HTML XML是用来传输和存储数据的。 XML多用在框架的配置文件…...

爬虫代理API的全面解析:让数据抓取更高效

在大数据时代&#xff0c;网络爬虫已经成为收集和分析数据的重要工具。然而&#xff0c;频繁的请求会导致IP被封禁&#xff0c;这时候爬虫代理API就显得尤为重要。本文将详细介绍爬虫代理API的作用、优势及如何使用&#xff0c;帮助你更高效地进行数据抓取。 什么是爬虫代理AP…...

PCL 点云中的植被信息提取(C++详细过程版)

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,首发于:2024年9月18日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 一、算法原理 1、原理概述 点云具有丰富的色彩信息,可以与植被指数结合使…...

requests-html的具体使用方法有哪些?

‌requests-html是一个功能强大的Python库&#xff0c;用于发送HTTP请求和解析HTML内容。它的使用方法包括安装库、基本使用、发送带有参数的请求、图片抓取实战案例、解析网页内容、执行JavaScript代码、使用CSS选择器来查找元素、继续跟踪链接并获取内容等。‌ ‌安装request…...

YOLOv9改进策略【卷积层】| AKConv: 具有任意采样形状和任意参数数量的卷积核

一、本文介绍 本文记录的是利用AKConv优化YOLOv9的目标检测网络模型。标准卷积操作的卷积运算局限于局部窗口&#xff0c;无法捕获其他位置的信息&#xff0c;且采样形状固定&#xff0c;无法适应不同数据集和位置中目标形状的变化。而AKConv旨在为卷积核提供任意数量的参数和…...

图神经网络池化方法

图神经网络池化方法 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 图神经网络池化方法前言一、扁平图池化二、分层图池化1.节点聚类池化2.节点丢弃池化 参考文献 前言 图池化操作根据其池化策略的差异&#xff…...

小琳AI课堂:确保大语言模型安全的八大策略--从数据隐私到用户教育

大家好&#xff0c;这里是小琳AI课堂。今天我们深入探讨如何保证大语言模型的安全&#xff0c;这可是关系到我们每个人哦&#xff01;&#x1f510; 首先&#xff0c;我们要明白&#xff0c;保证大语言模型的安全&#xff0c;需要从多个方面入手&#xff0c;确保模型在技术、法…...

Python 数学建模——高斯核密度估计

文章目录 前言原理代码实例scipy 实现seaborn 实现 前言 高斯核密度估计本是一种机器学习算法&#xff0c;在数学建模中也可以发挥作用。本文主要讨论用它来拟合变量的概率密度&#xff0c;获得概率密度函数 f ( x ) f(x) f(x)。 原理 已知一个连续型随机变量 X X X 的一系列…...

Flink+Spark相关记录

FlinkSpark相关记录 FlinkSQL Flink Streaming的一些点覆写RichSource、RichSink、RichMap 1.Source自动负载均衡&#xff0c;CDC源端加入一个全局调控的节点监控流量流速 2.Sink并发写入 3.Map与Iterator与增量迭代等用法关于Checkpoint几个用法 1.提交Commit至目的端数据库 2…...

2023 hnust 湖科大 毕业实习 报告+实习鉴定表

2023 hnust 湖科大 毕业实习 报告实习鉴定表 岗位 IT公司机房运维 实习报告 实习鉴定表 常见疑问 hnust 湖科大 毕业实习常见问题30问&#xff08;2021 年7月&#xff0c;V0.9&#xff09;-CSDN博客时间&#xff1a;大四开学第三四周毕业实习23年是企业&#xff08;黑马&am…...

ConflictingBeanDefinitionException | 运行SpringBoot项目时报错bean定义冲突解决方案

具体报错&#xff1a; Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name ‘CommissionMapperImpl’ for bean class [com.xxx.mapper.carrier.CommissionMapperImpl] conflicts with existing, non-co…...

如何切换淘宝最新镜像源(npm)【2024版】

在使用 Node.js 和 npm 进行开发时&#xff0c;大家通常会遇到 npm 源速度较慢的问题。特别是当你需要安装大量依赖时&#xff0c;npm 官方源的速度可能不尽如人意。幸运的是&#xff0c;淘宝提供了一个更快速的 npm 镜像源&#xff0c;可以让你更快地下载和安装包。本文将介绍…...

YoloV10改进策略:Block改进|PromptIR(NIPS‘2023)|轻量高效,即插即用|(适用于分类、分割、检测等多种场景)

文章目录 摘要代码详解如何在自己的论文中描述改进方法测试结果总结摘要 本文使用PromptIR框架中的PGM模块来改进YoloV10。PGM(Prompt Generation Module)模块是PromptIR框架中的一个重要组成部分,主要负责生成输入条件化的提示(prompts)。这些提示是一组可学习的参数,它…...

使用rust自制操作系统内核

一、系统简介 本操作系统是一个使用rust语言实现&#xff0c;基于32位的x86CPU的分时操作系统。 项目地址&#xff08;求star&#xff09;&#xff1a;GitHub - CaoGaorong/os-in-rust: 使用rust实现一个操作系统内核 详细文档&#xff1a;自制操作系统 语雀 1. 项目特性 …...

Flink难点和高阶面试题:Flink的状态管理机制如何保证数据处理的准确性和完整性

1 Flink状态管理机制核心要素 1.1 内置状态后端 在Apache Flink中,状态管理机制是确保数据处理准确性与完整性的关键环节。其核心在于灵活且高效的状态后端,这些后端负责在分布式环境中安全地存储和访问状态数据。Flink提供了多种内置状态后端,其中RocksDB和内存状态后端最…...

【激励广告带来的广告收入与用户留存率的双重提升】

激励广告带来的广告收入与用户留存率的双重提升 ) 随着移动应用市场的竞争加剧&#xff0c;如何通过广告变现成为众多开发者关注的焦点。其中&#xff0c;激励广告&#xff08;Rewarded Ads&#xff09;凭借其用户友好、互动性强等特点&#xff0c;逐渐成为开发者的首选。那些…...

指针和引用;内联函数和普通函数

1. 指针和引用 1.1 定义和性质区别 指针是一个变量&#xff0c;只不过这个变量存储的是一个地址&#xff0c;指向内存的一个存储单元&#xff1b;而引用跟原来的变量实质上是同一个东西&#xff0c;只不过是原变量的一个别名而已。可以有const指针&#xff0c;常量指针可以改…...