zookeeper基础内容

Zookeeper基础

概述

  • zookeeper(分布式协调服务) 本质:小型的文件存储系统+监听通知机制
  • ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册
  • ZooKeeper 的架构通过冗余服务实现高可用性(CP)[CAP:一致性、可用性、分区容错性](最终一致性)。
  • Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单
    易用的接口提供给用户使用。
    一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式
    协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功

数据结构

  • zookeeper本身是一个树形目录服务(名称空间),非常类似于标准文件系统,key-value 的形式存储。名称 key 由斜线 / 分
    割的一系列路径元素,zookeeper 名称空间中的每个节点都是由一个路径来标识的。
    在这里插入图片描述
  • 每个路径下的节点key(完整路径,名称)是唯一的,即同一级节点 key 名称是唯一的
  • 每个节点中存储了节点value和对应的状态属性
    在这里插入图片描述

Zookeeper节点操作

在这里插入图片描述

zookeeper节点操作命令

在这里插入图片描述

数据模型 znode 结构

在这里插入图片描述

zookeeper java客户端

  1. zookeeper 原生API:session不支持超时重连,watch监听需要进行反复注册、不支持对节点的递归操作
  2. Curator:提供各个场景的实现,提供了一套fluent风格的API调用
  3. zkClient:几乎没有参考文档,异常处理简化,没有提供各个场景对应的实现

ZooKeeper原生API

  • ZooKeeper原生API是Apache ZooKeeper项目自带的Java客户端库。它提供了连接ZooKeeper集群并执行基本操作的功能。虽然它足够灵活,但在处理复杂的分布式系统任务时可能显得有些繁琐。
  • 优点:
    • 官方支持,与ZooKeeper项目保持一致。
    • 原生API直接暴露ZooKeeper的底层操作,可以更好地理解ZooKeeper的工作原理。
  • 缺点:
    • 使用复杂,需要处理连接管理、会话超时等底层细节。
    • 需要手动编写一些常见的模式(例如分布式锁、队列)。

Curator

  • Curator是Netflix开发的一个基于ZooKeeper的高级客户端库。它构建在ZooKeeper原生API之上,简化了许多常见任务的实现,如分布式锁、选举、缓存和Leader选举等。
  • 优点:
    • 提供了高级别的抽象,简化了ZooKeeper的使用。
    • 包含了一系列常见的分布式系统模式的实现,如分布式锁、队列等。
    • 提供了更多的错误处理机制和易用性改进。
  • 缺点:
    • 引入了额外的依赖,增加了项目的复杂性。
    • 概念相对较多,学习曲线较陡。

zkClient

  • zkClient是Apache Kafka项目中的一个ZooKeeper客户端库。它提供了一些高级别的API,简化了ZooKeeper的连接和操作。
  • 优点:
    • 相对于ZooKeeper原生API,zkClient提供了更高级别的抽象。
    • 更容易上手,相对于Curator,zkClient的概念和学习曲线较为简单。
  • 缺点:
    • 社区支持相对较少。
    • 功能相对较为有限,对于某些复杂场景可能不够灵活。

对比总结

特性 ZooKeeper原生API Curator zkClient
抽象级别 较低
复杂度 较高 较高
功能完备性 一般 一般
社区支持 Apache官方支持 Netflix支持 相对较少
学习曲线 陡峭 陡峭 平缓

相关推荐

  1. zookeeper基础入门·

    2023-12-12 09:42:05       10 阅读
  2. zookeeper基本命令

    2023-12-12 09:42:05       17 阅读
  3. Css基础内容

    2023-12-12 09:42:05       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-12 09:42:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-12 09:42:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-12 09:42:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-12 09:42:05       20 阅读

热门阅读

  1. JDBC封装,用泛型和反射实现.

    2023-12-12 09:42:05       39 阅读
  2. ARM(串口控制硬件) 2023.12.11

    2023-12-12 09:42:05       42 阅读
  3. 双荧光素酶报告基因检测(五)

    2023-12-12 09:42:05       42 阅读
  4. 宝塔Nginx无法启动或启动失败的原因

    2023-12-12 09:42:05       33 阅读
  5. LeetCode //C - 1768. Merge Strings Alternately

    2023-12-12 09:42:05       40 阅读
  6. linux 字符设备驱动程序介绍

    2023-12-12 09:42:05       37 阅读
  7. Linux文件管理命令(cat)

    2023-12-12 09:42:05       35 阅读
  8. react面试题总结1

    2023-12-12 09:42:05       31 阅读