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

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 支持多种类型的节点,每种类型具有不同的特性和用途。

  1. 持久节点 (Persistent Node)

    • 创建后不会自动删除,除非显式地调用删除操作。
    • 示例命令:
      ./zkCli.sh -server localhost:2181 create /persistent-node "data"
      
  2. 临时节点 (Ephemeral Node)

    • 当创建该节点的客户端会话结束时,节点会被自动删除。
    • 临时节点不能有子节点。
    • 示例命令:
      ./zkCli.sh -server localhost:2181 create -e /ephemeral-node "data"
      
  3. 持久顺序节点 (Persistent Sequential Node)

    • 创建时,ZooKeeper 会在节点路径末尾自动添加一个递增的序列号。
    • 序列号是全局唯一的,即使节点被删除后,序列号也不会被重用。
    • 示例命令:
      ./zkCli.sh -server localhost:2181 create -s /persistent-sequential-node "data"
      
  4. 临时顺序节点 (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 库,所以在调用的时候是有区别的&#xff…...

智能电子后视镜,汽车驾驶更安全,会是一种趋势

相比于传统的后视镜,智能电子后视镜的确有很多的优点。在下雨天和夜晚场景,电子后视镜可以说是表现优秀。 我之前一直以为我们国内是有规定不能使用电子后视镜。没想到,偶然刷到享界S9的视频,这电子后视镜,妥妥的给安排…...

IEC104规约的秘密之九----链路层和应用层

104规约从TCP往上,分成链路层和应用层。 如图,APCI就是链路层,ASDU的就是应用层 我们看到报文都是68打头的,因为应用层报文也要交给链路层发送,链路层增加了开头的6个字节再进行发送。 完全用于链路层的报文每帧都只有…...

最新Prompt预设词指令教程大全ChatGPT、AI智能体(300+预设词应用)

使用指南 直接复制在AI工具助手中使用(提问前) 可以前往已经添加好Prompt预设的AI系统测试使用(可自定义添加使用) SparkAi系统现已支持自定义添加官方GPTs(对专业领域更加专业,支持多模态文档&#xff0…...

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 数据库增量日志解析,提供增量…...

顺序表的定义

一.顺序表的定义 顺序表--用顺序存储的方式实现线性表 顺序存储。把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中&#xff0c;元素之间的关 系由存储单元的邻接关系来体现。 二.顺序表的实现--静态分配 #include<stdio.h> #define MaxSize 10 //定义最大长度 …...

青少年编程能力等级测评CPA C++一级试卷(1)

青少年编程能力等级测评CPA C一级试卷&#xff08;1&#xff09; 一、单项选择题&#xff08;共20题&#xff0c;每题3.5分&#xff0c;共70分&#xff09; CP1_1_1&#xff0e;在C中&#xff0c;下列变量名正确的是&#xff08; &#xff09;。 A&#xff0e;$123 B&#…...

R语言中的plumber介绍

R语言中的plumber介绍 基本用法常用 API 方法1. GET 方法2. POST 方法3. 带路径参数的 GET 方法 使用 R 对数据进行操作处理 JSON 输入和输出运行 API 的其他选项其他功能 plumber 是个强大的 R 包&#xff0c;用于将 R 代码转换为 Web API&#xff0c;通过使用 plumber&#x…...

uniapp 设置 tabbar 的 midButton 按钮

效果展示&#xff1a; 中间的国际化没生效&#xff08;忽略就行&#xff09; 示例代码&#xff1a; 然后在 App.vue 中进行监听&#xff1a; <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修改初始化后的默认密码 &#xff08;1&#xff09;初始化mysql&#xff1a; mysqld --initialize --console &#xff08;2&#xff09;之后,mysql会生成一个默认复杂的密码&#xff0c;如果打算修改这个密码&#xff0c;可以先用旧密码登录&#xff1a; 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…...

基于协同过滤的景区旅游可视化与景区推荐系统(自动爬虫,地点可换)

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍过程展示项目移植每文一语 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 本项目是一个综合性的旅游景区数据管理与分析推荐系统,集成了用…...

ElasticSearch搜索引擎

npm run start ELK&#xff1a; ESLogstashKibana Kibana&#xff1a;端口号5601 elasticSearch是面向文档 Kibana可以将ElasticSearch的数据通过友好的页面展示出来。 Es与Kibana的版本一致 es查询的效率很高&#xff0c;处理大数据 ES和solr的区别&#xff1a; 当单纯的对已有…...

leetcode哈希表(二)-两个数组的交集

题目 . - 力扣&#xff08;LeetCode&#xff09; 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...