专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Zookeeper官方文档笔记(一)

前言

周围有些人会说:“咱写代码的和英文有啥关系?”,但个人认为开发人员很有必要学好英语。笔者当然英语也不算太好,以前学东西基本靠买书,但是这回想读官方文档,这着实是个挑战。官方文档毕竟是一手信息,学着放心,加油!

Zookeeper是什么?

ZooKeeper is a high-performance coordination service for distributed applications. It exposes common services – such as naming, configuration management, synchronization, and group services – in a simple interface so you don’t have to write them from scratch. You can use it off-the-shelf to implement consensus, group management, leader election, and presence protocols.

  • 释义:Zookeeper是一个高性能的分布式协调服务,提供了多种公共基础服务,例如命名、配置管理、分布式同步、分组管理。使用Zookeeper可以实现分组管理、分布式协同、集群Leader选举机制、节点在线协议等等。

设计理念

  • 简单:分布式进程通过共享分级拓扑结构的命名空间进行协调,即znodeznode虽然很像文件夹、文件,但是znode是为内存存储数据而设计的。
  • 自我复制:组成Zookeeper集群的节点,在内存中维护着各个机器的状态视图,并持久化存储数据处理日志以及快照,因此,只要大部分节点可用,则服务可用
  • 有序:Zookeeper用一个数字来表示每一次数据处理,即数据处理是有序的
  • 快速:“读”操作远比“写”操作多时,Zookeeper的性能高效,特别是在读写比为10:1的场景。

基础概念

数据结构

  • ZNode:包含版本号(表示数据变化)、ACL(Access Control List)变化、时间戳。版本号与时间戳用于验证缓存以及协同更新,即每次数据传输都会带着相应的版本号,用于验证该操作的合法性。

注:官方给了一个很有意思的比喻,即可以把ZNode理解为分布式文件系统,唯一的区别就是文件可以成为文件夹。

  • ZNode的特性如下:

1、可观察的(Watches):类似于观察者模式,Znode数据变化会提醒所有监听(watch)该Znode的客户端。 2、读写原子性:Znode的读写操作都具有原子性(一次读所有数据,一次写替换所有数据),而且有ACL来限制读写权限。读写原子性意味着ZNode不是为存储大量数据设计的(会导致高延时等性能问题),超过1MB即会被校验机制拦截,通常都是KB级别。 3、临时节点:一旦创建ZNode的会话结束,ZNode就会被销毁,因此与会话关联的ZNode不能有子节点。 4、有序节点(唯一性):每当创建一个ZNode时,Zookeeper会在路径上添加一个对父节点的唯一标识,这个标识是自增的(格式为%010d)。 5、容器节点(3.5.3特性):容器节点用于leader选举、锁机制等功能,容器节点中如果没有子节点,就会成为被删除的对象。 6、TTL节点(3.5.3特性):创建持久节点或者持久有序节点时,可以设置TTL(毫秒),如果节点在TTL时间内没有被修改,而且没有子节点,就会成为被删除的对象。

有序性标识

  • Zxid(Zookeeper Transaction Id):对整体Zookeeper变化的标识
  • Version numbers:每个ZNode的变化都会导致三个版本号中的一个版本号增加,三种版本号分别为version(数据变化版本号)、cversion(子节点数量变化版本号)、aversion(访问控制列表变化版本号)。
  • Ticks:Zookeeper集群使用ticks来表示特定事件发生的时间,例如状态上报、会话超时、集群节点之间连接超时等。具体的值不会直接暴露给客户端,只是以最小超时时间阈值告知客户端。
  • Real time:仅用于ZNode创建、修改将时间戳存储进ZNode。

ZNode存储字段

  • czxid:ZNode创建时的zxid
  • mzxid:ZNode最后一次修改时的zxid
  • pzxid:改ZNode的子节点最后一次修改时的zxid
  • ctime:ZNode创建时的时间戳
  • mtime:ZNode最后一次修改时的时间戳
  • version、cversion、aversion:如上所述
  • ephemeralOwner:用于临时节点,存储创建该临时节点的sessionId,其他类型节点为0
  • dataLength:存储数据长度
  • numChildren:子节点数

结语

今天的摸鱼就到这里了,官方文档的好处在于简介明快,一手信息,以后尽量多看看~

参考文献

zookeeper.apache.org/doc/current…

文章永久链接:https://tech.souyunku.com/40497

未经允许不得转载:搜云库技术团队 » Zookeeper官方文档笔记(一)

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们