Zookeeper快速入门:部署服务、基本概念与操作
文章目录
- 一、部署服务
- 1.下载与安装
- 2.查看并修改配置文件
- 3.启动
- 二、基本概念与操作
- 1.节点类型
- 特性总结
- 使用场景示例
- 查看节点
- 查看节点数据
- 2.文件系统层次结构
- 3.watcher
一、部署服务
1.下载与安装
- 下载:
一定要下载编译后的文件,后缀为bin.tar.gz
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
- 解压:
targetUrl填目标安装目录
tar -zxf apache-zookeeper-3.8.4-bin.tar.gz targetUrl
2.查看并修改配置文件
配置文件在解压目录下的/conf中,提供了一个示范文件zoo_sample.cfg:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
-
解析:
- tickTime=2000:这是 ZooKeeper 中最基本的时间单位,以毫秒为单位。它用于心跳检测以及最小会话超时时间的计算。在这个例子中,tickTime 被设置为 2000 毫秒(即 2 秒)。
- initLimit=10:这个参数定义了集群中的 follower 节点与 leader 节点进行初始同步的最大时间限制,以 tickTime 为单位。例如,如果 tickTime 是 2000 毫秒,那么 initLimit 设置为 10 就意味着初始同步的最大时间是 20000 毫秒(即 20 秒)。
- syncLimit=5:这个参数定义了 follower 节点与 leader 节点之间发送请求和接收响应的最大时间限制,同样以 tickTime 为单位。例如,如果 tickTime 是 2000 毫秒,那么 syncLimit 设置为 5 就意味着这个时间限制是 10000 毫秒(即 10 秒)。
- dataDir=/tmp/zookeeper:这个参数指定了 ZooKeeper 存储数据快照的目录。在生产环境中,不建议使用 /tmp 目录,因为 /tmp 目录可能会在系统重启时被清空。应该选择一个持久化的存储位置来存放数据。
- clientPort=2181:这个参数指定了客户端连接 ZooKeeper 服务的端口。默认情况下,ZooKeeper 服务监听 2181 端口。
-
修改配置文件:
# 复制一份
cp zoo_sample.cfg zoo.cfg
# 将dataDir=/tmp/zookeeper这一行的目录修改为存储数据的目录
vim zoo.cfg
3.启动
目前将zookeeper部署为单体结构的,先不考虑集群。
在bin目录下执行以下命令:
sh zkServer.sh start
- 通过客户端进行连接:
在bin目录下执行以下命令:
./zkCli.sh -server localhost:2181
二、基本概念与操作
1.节点类型
在 Apache ZooKeeper 中,节点(也称为 znode)是存储数据的基本单元。ZooKeeper 支持多种类型的节点,每种类型具有不同的特性和用途。
-
持久节点 (Persistent Node)
- 创建后不会自动删除,除非显式地调用删除操作。
- 示例命令:
./zkCli.sh -server localhost:2181 create /persistent-node "data"
-
临时节点 (Ephemeral Node)
- 当创建该节点的客户端会话结束时,节点会被自动删除。
- 临时节点不能有子节点。
- 示例命令:
./zkCli.sh -server localhost:2181 create -e /ephemeral-node "data"
-
持久顺序节点 (Persistent Sequential Node)
- 创建时,ZooKeeper 会在节点路径末尾自动添加一个递增的序列号。
- 序列号是全局唯一的,即使节点被删除后,序列号也不会被重用。
- 示例命令:
./zkCli.sh -server localhost:2181 create -s /persistent-sequential-node "data"
-
临时顺序节点 (Ephemeral Sequential Node)
- 兼具临时节点和顺序节点的特性。
- 当创建该节点的客户端会话结束时,节点会被自动删除,并且创建时会自动添加一个递增的序列号。
- 示例命令:
./zkCli.sh -server localhost:2181 create -e -s /ephemeral-sequential-node "data"
特性总结
-
持久节点 (Persistent Node):
- 不会自动删除。
- 可以有子节点。
- 适用于需要长期存在的数据。
-
临时节点 (Ephemeral Node):
- 客户端会话结束时自动删除。
- 不能有子节点。
- 适用于表示客户端的存在或状态。
-
持久顺序节点 (Persistent Sequential Node):
- 不会自动删除。
- 创建时自动添加序列号。
- 适用于需要唯一标识符的场景,例如任务分配。
-
临时顺序节点 (Ephemeral Sequential Node):
- 客户端会话结束时自动删除。
- 创建时自动添加序列号。
- 适用于需要临时唯一标识符的场景,例如临时任务分配。
使用场景示例
-
分布式锁:
- 使用临时顺序节点实现分布式锁。每个客户端创建一个临时顺序节点,通过比较节点的序列号来决定谁获得锁。
-
配置管理:
- 使用持久节点存储配置信息,所有客户端都可以读取这些配置。
-
服务发现:
- 使用临时节点注册服务实例,当服务实例宕机时,对应的临时节点会被自动删除。
-
任务调度:
- 使用持久顺序节点分配任务,每个任务有一个唯一的序列号,确保任务的唯一性和有序性。
查看节点
依次创建以上四种节点,然后执行ls /命令可以看到创建的所有节点:

查看节点数据
示例:
get /ephemeral-node

2.文件系统层次结构
在 Apache ZooKeeper 中,节点(znode)可以形成一个层次结构,类似于文件系统中的目录和文件。每个节点可以有父节点和子节点。
注意,不能为临时节点创建子节点。
假设我们已经有了一个名叫persistent-node的父节点,可以为它创建一个子节点:
create /persistent-node/node1 "node1"

3.watcher
ZooKeeper 的 Watcher 机制是一种事件通知机制,允许客户端在特定事件发生时收到通知。这对于实现分布式协调和同步非常有用。
- Watcher 机制的工作原理:
注册 Watcher:客户端可以在创建节点、获取节点数据、列出子节点等操作时注册一个 Watcher。注册 Watcher 后,当指定的事件发生时,ZooKeeper 会向客户端发送一个通知。 - 事件类型:
NodeCreated:节点被创建。
NodeDeleted:节点被删除。
NodeDataChanged:节点的数据发生变化。
ChildChanged:节点的子节点列表发生变化。 - 一次性通知:
每个 Watcher 只触发一次。一旦触发,客户端需要重新注册 Watcher 以继续接收后续的通知。
相关文章:
Zookeeper快速入门:部署服务、基本概念与操作
文章目录 一、部署服务1.下载与安装2.查看并修改配置文件3.启动 二、基本概念与操作1.节点类型特性总结使用场景示例查看节点查看节点数据 2.文件系统层次结构3.watcher 一、部署服务 1.下载与安装 下载: 一定要下载编译后的文件,后缀为bin.tar.gz w…...
【Sqlite】sqlite内部函数sqlite3_value_text特性
目录 ⚛️1 结论 ☪️2 说明 ☪️3 传入数值转成科学计数法 ♋3.1 只有整数部分 ♏3.2 只有小数部分 ♐3.3 整数小数 ⚛️1 结论 整数(sqlite视为int64)位数 > 20位,sqlite3_value_text 采用科学计数法。否则正常表示。 浮点数(sqlite视为double)的整数部…...
树莓派应用--AI项目实战篇来啦-4.OpenCV读取、写入和显示视频
1. 介绍 视频是由一张一张图片组成的,所以读取视频就相当于读取很多张图片,然后将其连起来cv2.VideoCapture可以捕获摄像头,但是针对树莓派的CSI摄像头调用方式采用了之前介绍的Picamera2 库,所以在调用的时候是有区别的ÿ…...
智能电子后视镜,汽车驾驶更安全,会是一种趋势
相比于传统的后视镜,智能电子后视镜的确有很多的优点。在下雨天和夜晚场景,电子后视镜可以说是表现优秀。 我之前一直以为我们国内是有规定不能使用电子后视镜。没想到,偶然刷到享界S9的视频,这电子后视镜,妥妥的给安排…...
IEC104规约的秘密之九----链路层和应用层
104规约从TCP往上,分成链路层和应用层。 如图,APCI就是链路层,ASDU的就是应用层 我们看到报文都是68打头的,因为应用层报文也要交给链路层发送,链路层增加了开头的6个字节再进行发送。 完全用于链路层的报文每帧都只有…...
最新Prompt预设词指令教程大全ChatGPT、AI智能体(300+预设词应用)
使用指南 直接复制在AI工具助手中使用(提问前) 可以前往已经添加好Prompt预设的AI系统测试使用(可自定义添加使用) SparkAi系统现已支持自定义添加官方GPTs(对专业领域更加专业,支持多模态文档࿰…...
DockerCompose 启动 open-match
背景介绍 open-match是Google和unity联合开源的支持实时多人匹配的框架,已有多家游戏厂商在生产环境使用,官网 https://open-match.dev/site/ 。原本我们使用的是UOS上提供的匹配能力,但是UOS目前不支持自建的Dedicated servers 集群&#x…...
Chainlit集成Dashscope实现语音交互网页对话AI应用
前言 本篇文章讲解和实战,如何使用Chainlit集成Dashscope实现语音交互网页对话AI应用。实现方案是对接阿里云提供的语音识别SenseVoice大模型接口和语音合成CosyVoice大模型接口使用。针对SenseVoice大模型和CosyVoice大模型,阿里巴巴在github提供的有开…...
Canal 扩展篇(阿里开源用于数据同步备份,监控表和表字段(日志))
1.Canal介绍 Canal把自己伪装成从数据库,获取mysql主数据库的日志(binlog)信息,所以要想使用canal就得先开启数据库日志 https://github.com/alibaba/canal Canal 主要用途是基于 MySQL 数据库增量日志解析,提供增量…...
顺序表的定义
一.顺序表的定义 顺序表--用顺序存储的方式实现线性表 顺序存储。把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关 系由存储单元的邻接关系来体现。 二.顺序表的实现--静态分配 #include<stdio.h> #define MaxSize 10 //定义最大长度 …...
青少年编程能力等级测评CPA C++一级试卷(1)
青少年编程能力等级测评CPA C一级试卷(1) 一、单项选择题(共20题,每题3.5分,共70分) CP1_1_1.在C中,下列变量名正确的是( )。 A.$123 B&#…...
R语言中的plumber介绍
R语言中的plumber介绍 基本用法常用 API 方法1. GET 方法2. POST 方法3. 带路径参数的 GET 方法 使用 R 对数据进行操作处理 JSON 输入和输出运行 API 的其他选项其他功能 plumber 是个强大的 R 包,用于将 R 代码转换为 Web API,通过使用 plumber&#x…...
uniapp 设置 tabbar 的 midButton 按钮
效果展示: 中间的国际化没生效(忽略就行) 示例代码: 然后在 App.vue 中进行监听: <script>export default {onLaunch(e) {// #ifdef APPuni.onTabBarMidButtonTap(()>{console.log("中间按钮点击回调…...
php 生成随机数
记录:随机数抽奖 要求:每次生成3个 1 - 10 之间可重复(或不可重复)的随机数,10次为一轮,每轮要求数字5出现6次、数字4出现3次、…。 提炼需求: 1,可设置最小数、最大数、每次抽奖生成随机数的个数、是否允许重复 2,可设置每轮指定数字的出现次数 3,可设置每轮的抽奖…...
MySQL 8.4修改初始化后的默认密码
MySQL 8.4修改初始化后的默认密码 (1)初始化mysql: mysqld --initialize --console (2)之后,mysql会生成一个默认复杂的密码,如果打算修改这个密码,可以先用旧密码登录: mysql -u…...
前端开发笔记--css 黑马程序员1
文章目录 1. css 语法规范2.css的书写风格3.基础选择器选择器的分类标签选择器类选择器类选择器的特殊使用--多类名 id 选择器 字体属性常见字体字体大小字体粗细字体倾斜字体的复合简写字体属性总结 文本属性文本颜色文本对齐装饰文本文本缩进文本间距文本属性总结 css的引入方…...
ORACLE 19C创建多个不同字符集PDB
现在需要在一个测试环境创建1个为AL32UTF8的PDB,2个ZHS16GBK的PDB 这种情况下,必须先创建的CDB为AL32UTF8,下面是具体步骤: 1.AL32UTF8的pdb在建实例的时候一起创建完成 2.创建第一个ZHS16GBK的PDB cdr,通过pdbseed来克隆: SQL> create pluggable database cdr admin us…...
基于协同过滤的景区旅游可视化与景区推荐系统(自动爬虫,地点可换)
文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目介绍过程展示项目移植每文一语 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 项目介绍 本项目是一个综合性的旅游景区数据管理与分析推荐系统,集成了用…...
ElasticSearch搜索引擎
npm run start ELK: ESLogstashKibana Kibana:端口号5601 elasticSearch是面向文档 Kibana可以将ElasticSearch的数据通过友好的页面展示出来。 Es与Kibana的版本一致 es查询的效率很高,处理大数据 ES和solr的区别: 当单纯的对已有…...
leetcode哈希表(二)-两个数组的交集
题目 . - 力扣(LeetCode) 给定两个数组 nums1 和 nums2 ,返回 它们的交集。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序 。 示例 1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[…...
大语言模型记忆增强框架:LightMem原理、实现与工程实践
1. 项目概述:当大模型遇上“记忆”瓶颈最近在折腾大语言模型(LLM)应用开发的朋友,估计都遇到过同一个头疼的问题:模型记不住事儿。你精心设计了一个对话系统,希望它能记住用户的历史偏好,比如“…...
基于ChatGPT的智能网页数据抓取:原理、实践与成本优化
1. 项目概述:当ChatGPT遇上网页抓取最近在做一个数据驱动的项目,需要从几十个不同结构的网站上抓取产品信息,手动复制粘贴显然不现实,而传统的爬虫脚本又需要为每个网站单独写解析规则,费时费力。就在我头疼的时候&…...
Flowable工作流实战:手把手教你安全删除运行中的任务(附完整SQL与避坑指南)
Flowable工作流实战:安全删除运行中任务的完整指南 在业务流程管理系统中,Flowable作为一款轻量级的工作流引擎,因其高效的流程执行能力和灵活的扩展性而广受开发者青睐。然而在实际开发过程中,我们难免会遇到需要强制删除运行中任…...
UWB定位标签天线怎么选?PATCH、PIFA、DIPOLE三种方案全对比(含NXP/Qorvo模组适配建议)
UWB定位标签天线选型指南:PATCH、PIFA、DIPOLE三大方案深度解析与工程决策 在物联网定位技术领域,超宽带(UWB)凭借其厘米级精度和强抗干扰能力,已成为工业定位、智能仓储和医疗设备追踪的核心解决方案。而天线作为UWB系统的"感官器官&qu…...
零依赖STL转STEP工具:5分钟实现3D格式无缝转换的完整指南
零依赖STL转STEP工具:5分钟实现3D格式无缝转换的完整指南 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 在数字化制造和工程设计的交叉领域,STL到STEP格式转换已成为连…...
Unity实战:利用TriLib插件实现运行时动态加载外部3D模型
1. TriLib插件基础入门 第一次接触TriLib插件时,我也被它强大的功能惊艳到了。这个插件最大的价值在于,它能让我们在Unity运行时动态加载各种主流3D模型格式,比如FBX、OBJ、GLTF等,而不需要提前在编辑器中导入。想象一下ÿ…...
VSCode调试STM32实战:解决Cortex-Debug插件配置JLink/OpenOCD时最常见的5个报错
VSCode调试STM32实战:破解Cortex-Debug插件五大经典报错 当你在深夜赶工STM32项目,按下F5期待调试器顺利启动时,终端却弹出鲜红的错误信息——这种挫败感每个嵌入式开发者都深有体会。本文不重复那些基础配置教程,而是直击VSCode…...
SpringBoot配置加载顺序实战:从踩坑到精通,搞懂spring.profiles.active和spring.config.location
SpringBoot配置加载顺序实战:从踩坑到精通 在SpringBoot项目的开发与部署过程中,配置加载顺序往往是开发者最容易踩坑的环节之一。你是否遇到过本地测试正常,但打包部署后配置突然失效的情况?或者在不同环境间切换时,某…...
树与二叉树:数据结构核心解析
引言在前面的文章中,我们已经系统学习了线性数据结构——链表、栈、队列。线性结构的特点是元素之间存在一对一的先后关系。然而,现实世界中的很多数据关系是一对多的:文件系统中的目录与子目录、公司的组织架构、网页的 DOM 结构……树&…...
Diablo Edit2:终极暗黑破坏神2存档编辑器完全指南
Diablo Edit2:终极暗黑破坏神2存档编辑器完全指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 你是否厌倦了在暗黑破坏神2中反复刷装备的枯燥过程?是否因为技能点分配失…...
