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

Zookeeper入门

Zookeeper入门

  • 概述
  • 特点
  • 结构
  • 应用场景
  • 选举机制
  • 节点信息
  • 监听原理
  • 写数据原理
  • 分布式锁

概述

Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。

Zookeeper 从设计模式的角度来开:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就通知已经注册的观察者做出相应的反应

特点

  • Zookeeper由一个领导者,多个跟随着组成的集群
  • 集群中只要有半数以上的节点存活,Zookeeper就可以正常服务。因此适合安装基数台服务器
  • 全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server数据都是一致的
  • 更新请求顺序执行,来自同一个Client的更新请求按照发送的顺序依次执行
  • 数据更新原子性,一次数据更新要么成功要么失败
  • 实时性,在一定时间范围内,Client能读取到最新的数据

结构

Zookeeper的数据模型的结构和Unix文件系统很类似,整体上可以看作是一棵树,每个节点都是一个ZNode,每个ZNode默认存储1MB的数据(因此不适合存过大的数据),每个ZNode都可以通过其路径来唯一标识。

Zookeeper = 文件系统 + 通知机制

应用场景

  • 一般要求一个集群中,所有节点的配置信息是一致的,对配置文件修改后,希望能够快速同步到各个节点上,比如 kafka集群
    实现:
    可将配置信息写入Zookeeper上的一个Znode,各个客户端服务器监听这个Znode,一旦Znode中的数据被修改,Zookeeper将通知各个客户端服务器

  • 分布式环境中实时掌握每个节点的状态是必要的,可以根据节点实时状态做出调整,Zookeeper可以实现实时监控节点状态变化
    实现:
    可将节点信息写入Zookeeper上的一个ZNode,监听这个ZNode可以获取他的实时状态变化

选举机制

Zookeeper分为leader 和 follower 两种

假设有五台服务器,初始的选举方法:

  • 服务器1先启动,发起第一次选举。服务器1会投自己一票,此时服务器1只有一票,没有达到半数以上,无法选举成功,服务器1的状态为Looking
  • 服务器2启动,再次发起选举,服务器1和2先投自己一票,然后交换选票信息,此时服务器1发现服务器2的myid比自己目前投票的大,就将投票改为服务器2,此时服务器1没有票,服务器2两票,但是此时并没有服务器的票数超过半数,所以无法选举成功,服务器1,2状态都保持Looking
  • 服务器3启动,发起一次选举。和上述过程相似,此时服务器3的myid最大会获得3票,因为已经过半所以服务器3为Leader,服务器1,2为follower。并改变服务器1,2的状态为Following, 服务器3的状态为Leading
  • 服务器4启动,发起选举,因为服务器1,2,3的状态都不是Looking所以不会再更改选票信息,最后服务器3三票,服务器4,自己投了一票,服务器4将自己的票投给服务器3,并将状态改为Following
  • 服务器5同服务器4一样

SID: 服务器的ID,唯一标识,Zookeeper集群中的机器,每台机器都不可以重复,和myid一致
ZXID: 事务ID,ZXID是一个事务ID,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的ZXID的值不一定完全一致,这与Zookeeper对客户端更新请求的处理逻辑有关
Epoch: 每个Leader任期的代号,没有Leader时,同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加

Zookeeper选举Leader的情况:

  • 服务器初始化启动
  • 服务器运行期间无法和Leader保持连接

当机器进入选举流程时,当前集群可能会处于以下两种状态:

  • 集群中是存在Leader的。这种情况下,机器去选举Leader,会被告知当前服务器的Leader信息,该机器只要和Leader建立连接即可
  • 集群中不存在Leader。当有Leader故障时,集群会选择新的Leader,选取的规则为:(1):比较EPOCH,大的胜出
    (2):ECOPH相同是,比较事务Id即ZXID,大的胜出
    (3):事务ID相同时,比较服务器ID,大的胜出

节点信息

节点信息:

  • 持久:客户端和服务器断开连接后,创建的节点不删除
  • 短暂:客户端和服务器断开连接后,节点会自己删除

节点类型:

  • 持久化目录节点: 客户端与Zookeeper断开连接后,节点依旧存在
  • 持久化顺序编号目录节点:客户端与Zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
  • 临时目录节点:客户端与Zookeeper断开连接后,节点被删除
  • 临时顺序编号目录节点:客户端与Zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

监听原理

  • 首先需要一个main线程
  • 在main线程中创建Zookeeper的客户端,这时会创建两个线程,一个负责网络连接通信,一个负责监听
  • 通过connect线程,将注册的监听事件发给zookeeper
  • 在zookeeper的注册监听器列表中,将注册的监听事件添加到列表中
  • zookeeper监听到有数据或路径变化后,将这个消息发生给listener线程
  • listener线程内部调用了process方法

写数据原理

  • 对Leader节点进行写操作时:客户端将写数据发给Leader,Leader将请求发送给一个Fllower,当Follower节点收到后,回复给Leader,Leader统计目前有多少Follower收到了,如果已经过半,就回复给客户端,剩余的Follower慢慢写入
  • 对Follower节点进行写操作时:客户端将写数据发给Follower,Follower先把请求发给Leader,Leader向发送给他的Follower再次发送数据,来确保接受的数据是正确的,Follower收到后向Leader发送确认请求。之后再依次向各个别的Follower发送写数据,当有过半的节点确认后,Leader向第一次客户端写入的Follower发送确认请求,Follower再向客户端进行确认。

分布式锁

服务端接收到客户端的请求后:

  • 在/locks节点下,创建一个临时顺序节点
  • 判断自己是不是当前节点下最小的节点,如果是,则获取到锁。如果不是,则对前一个节点进行监听
  • 获取到锁、处理完业务后。delete节点去释放锁,然后下面的节点将收到通知,重复第二步的操作

相关文章:

Zookeeper入门

Zookeeper入门概述特点结构应用场景选举机制节点信息监听原理写数据原理分布式锁概述 Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。 Zookeeper 从设计模式的角度来开:是一个基于观察者模式设计的分布式服务管理框架&#xf…...

JavaScript

BOM核心对象docunmentBOM核心对象windowBOM包含着DOMF12即可打开浏览器控制台navigator(浏览器版本)、history(浏览器历史记录),location(地址信息)、screen(屏幕相关)JS输出形式:浏览器输出:wi…...

.gitignore 常用忽略规则

.gitignore常用忽略语法 1、空格不匹配任意文件,可作为分隔符,可用反斜杠转义 2、以井号#开头的文件标识注释,可以使用反斜杠进行转义 3、以斜杠/开头表示目录 4、以星号*通配多个字符 5、以问号?通配单个字符 6、以方括号[]包含单个字符的…...

Vue路由 —— vue-router

在上一篇内容讲到关于单页面组件的内容,同时也附上补充讲了关于单页面(SPA)和多页面(MPA)之间的优缺点,在本篇目当中就要来讲这个路由(vue-router),通过路由来实现页面的…...

Java Jackson TypeReference获取泛型类型信息【泛型】

Jackson是一个比较流行的Json序列化和反序列化框架。本文以Jackson为例介绍TypeReference实现涉及泛型的反序列化,及TyperReference的实现原理。对于获取泛型类型信息的场景,TypeReference是一个可以参考的通用解决方案。 Jackson ObjectMapper的readVa…...

Python 核心笔记(二)

特殊规则及特殊字符:#号(#) : 注释换行(\n) : 换行反斜线(\) : 继续上一行分号(;) : 两个语句连在一行冒号(:) : 将代码块的头和体分开不同的缩进…...

Hadoop集群搭建

文章目录一、运行环境配置(所有节点)1、基础配置2、配置Host二、依赖软件安装(101节点)1、安装JDK2、安装Hadoop(root)3、Hadoop目录结构三、本地运行模式(官方WordCount)1、简介2、本地运行模式(官方WordCount)四、完全分布式运行…...

每个前端都应该掌握的7个代码优化的小技巧

本文将介绍7种JavaScript的优化技巧,这些技巧可以帮助你更好的写出简洁优雅的代码。 1. 字符串的自动匹配(Array.includes) 在写代码时我们经常会遇到这样的需求,我们需要检查某个字符串是否是符合我们的规定的字符串之一。最常…...

金三银四丨黑蛋老师带你剖析-二进制漏洞

作者:黑蛋二进制漏洞岗上篇文章我们初步了解了一下简历投递方式以及二进制方向相关逆向岗位的要求,今天我们就来看看二进制漏洞相关的岗位,当然,漏洞岗位除了分不同平台,也有漏洞挖掘岗和漏洞分析利用岗。同样&#xf…...

pgsql-用户角色组角色创建和维护

pgsql-用户&角色&组角色创建和维护 环境 win10pgsql 14.2 相关文档 PostgreSQL 14.1 手册 create 语法 grant 授权语法 revoke 撤回语法 alter 更新语法 用户、角色、组角色概念和区别 早期版本(8.1之前)中用户、组、角色是不同的概念&#…...

算法与数据结构理解

目录1、数据结构与算法1.1 定义1.2 常见数据结构1.3 常用算法2、插入排序3、希尔排序4、归并排序1、数据结构与算法 1.1 定义 数据结构:是计算机中存储、组织数据的方式。具有一定逻辑关系,应用某种存储结构,并且封装了相应操作的数据元素集…...

常见的C++软件异常场景分析与总结

根据排查软件异常问题的经历和经验,简单的总结一下软件异常的场景和原因,以供参考。 1、野指针问题 可能是指针没初始化就使用。也有可能是指针指向的内存已经被释放,但是指针没置为NULL,一旦访问这样的指针就会出问题。在很多情…...

【虹科公告】好消息!云展厅开放时间长达1年,2023年不限次云观展

云展厅开放通知 2023年,【虹科赋能汽车智能化云展厅】将持续开放,开放时间长达一年,开放期内,均可进入观展,没有次数及观看时长限制,欢迎大家随时进入云展厅观展。 虹科赋能汽车智能化云展厅 聚焦前沿技…...

Linux破解root密码

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Linux操作…...

2023年信息与通信工程国际会议(JCICE 2023)

2023年信息与通信工程国际会议(JCICE 2023) 重要信息 会议网址:www.jcice.org 会议时间:2023年3月17-19日 召开地点:成都 截稿时间:2023年2月10日 录用通知:投稿后2周内 收录检索:EI,Scopus 会议简介…...

ASP.NET Core+Element+SQL Server开发校园图书管理系统(完)

随着技术的进步,跨平台开发已经成为了标配,在此大背景下,ASP.NET Core也应运而生。本文主要基于ASP.NET CoreElementSql Server开发一个校园图书管理系统为例,简述基于MVC三层架构开发的常见知识点,本系列共五篇文章&a…...

elasticsearch 批量写入(Python版).md

1. 插入数据 现在我们如果有大量的文档(例如10000000万条文档)需要写入es 的某条索引中,该怎么办呢? 1.1 顺序插入 import time from elasticsearch import Elasticsearches Elasticsearch()def timer(func):def wrapper(*arg…...

【排序算法】快速排序(Quick Sort)

快速排序(Quick Sort)使用分治法算法思想。快速排序介绍它的基本思想是: 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排…...

SpringIOC之创建Bean的核心方法doGetBean

概述面向资源(XML、Properties)、面向注解定义的 Bean 是如何被解析成 BeanDefinition(Bean 的“前身”),并保存至 BeanDefinitionRegistry 注册中心里面,实际也是通过 ConcurrentHashMap 进行保存。Spring…...

docker快速部署xxjob2.3.0-SpringBoot快速集成示例

xxjob 2.3.0 部署 参考资料 docker安装xxl-job-admin步骤_JEECG低代码平台的技术博客_51CTO博客 run前准备 1 新建数据库 xxl_job 2 建表sql(可以直接使) https://github.com/xuxueli/xxl-job/blob/master/doc/db/tables_xxl_job.sql建库sql # # XXL-JOB v2.4.0-SNAPSHOT…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...

Tauri2学习笔记

教程地址&#xff1a;https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引&#xff1a;https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多&#xff0c;我按照Tauri1的教程来学习&…...

精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑

精益数据分析&#xff08;98/126&#xff09;&#xff1a;电商转化率优化与网站性能的底层逻辑 在电子商务领域&#xff0c;转化率与网站性能是决定商业成败的核心指标。今天&#xff0c;我们将深入解析不同类型电商平台的转化率基准&#xff0c;探讨页面加载速度对用户行为的…...