Apache ZooKeeper - ZK的基本特性与节点&应用场景一览

简介: Apache ZooKeeper - ZK的基本特性与节点&应用场景一览

20201115170831896.png



概述


说点正确的废话

zookeeper是一个分布式协调框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。


20201115171153188.png


ZK由JAVA编写,支持JAVA 和C两种语言的客户端。


ZK产生的背景


通常情况下,单个物理节点很容易达到性能,计算或者容量的瓶颈,所以这个时候就需要多个物理节点来共同完成某项任务,一个分布式系统的本质是分布在不同网络或计算机上的程序组件,彼此通过信息传递来协同工作的系统,而Zookeeper正是一个分布式应用协调框架,在分布式系统架构中有广泛的应用场景。


项目从单体到分布式转变之后,将会产生多个节点之间协同的问题


  1. 每天的定时任务由谁哪个节点来执行
  2. RPC调用时的服务发现
  3. 如何保证并发请求的幂等


这些问题可以统一归纳为多节点协调问题,如果靠节点自身进行协调这是非常不可靠的,性能上也不可取。必须由一个独立的服务做协调工作,它必须可靠,而且保证性能。


安装

JDK依赖

Java编写,依赖JDK, JDK Version >=8


下载


官网下载: https://zookeeper.apache.org/releases.html#download

当然了,国内也有镜像可以下载,比如

3.5.8 版本

[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz

3.6.2 版本

[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeep


这里我们选用3.5.8的版本


解压

[root@localhost ~]# tar -xvzf apache-zookeeper-3.5.8-bin.tar.gz 


修改配置文件

cd  {zookeeper_home}/conf   # 按实际路径调整
cp zoo_sample.cfg zoo.cfg


启动 / 停止

 {zookeeper_home}/bin/zkServer.sh  # 按实际路径调整,查看启动支持哪些参数
[root@localhost bin]# ./zkServer.sh 
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Usage: ./zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|restart|status|print-cmd}
[root@localhost bin]# 


启动,采用默认的配置文件

[root@localhost bin]# ./zkServer.sh start 
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost bin]# 


停止

[root@localhost bin]# ./zkServer.sh stop
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Stopping zookeeper ... 
STOPPED
[root@localhost bin]# 


也可以指定配置文件,不指定的话默认使用 conf/zoo.cfg

[root@localhost bin]# ./zkServer.sh  start ../conf/zoo.cfg


连接服务器

bin/zkCli.sh ‐server ip:port

例子

[root@localhost bin]# ./zkCli.sh -server 192.168.126.129:2181
/usr/bin/java
Connecting to 192.168.126.129:2181
2020-11-15 23:43:05,472 [myid:] - INFO  [main:Environment@109] - Client environment:zookeeper.version=3.5.8-f439ca583e70862c3068a1f2a7d4d068eec33315, built on 05/04/2020 15:07 GMT
........
........
........
Welcome to ZooKeeper!
........
........
........
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.126.129:2181(CONNECTED) 0] 


配置文件说明

# zookeeper时间配置中的基本单位 (毫秒)
tickTime=2000
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数 
syncLimit=5
#zookeper 数据存储目录
dataDir=/tmp/zookeeper
#对客户端提供的端口号
clientPort=2181
#单个客户端与zookeeper最大并发连接数
maxClientCnxns=60
# 保存的数据快照数量,之外的将会被清除
autopurge.snapRetainCount=3
#自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
autopurge.purgeInterval=1


ZK 核心概念 (文件系统数据结构+监听通知机制)


可以先把Zookeeper 理解为 是一个用于存储少量数据的基于内存的数据库,主要有如下两个核心的概念:文件系统数据结构+监听通知机制


文件系统数据结构


Zookeeper维护一个类似文件系统的数据结构

20201115235230950.png


每个子目录项都被称作为 znode(目录节点),和文件系统类似,可以自由的增加、删除znode,在一个znode下增加、删除子znode。


6种Node类型

  • PERSISTENT-持久化目录节点

客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,永远存在


  • PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点

客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号 ,非常适合用于分布式锁、分布式选举等场景


  • EPHEMERAL-临时目录节点

客户端与zookeeper断开连接后,该节点被删除 适用于心跳,服务发现等场景。

  • EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点

客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号


  • Container 节点

3.5.3 版本新增,如果Container节点下面没有子节点,则Container节点在未来会被Zookeeper自动清除,定时任务默认60s 检查一次

  • TTL 节点 (Time To Life)

默认禁用,只能通过系统配置 zookeeper.extendedTypesEnabled=true 开启,不稳定



20201115235606533.png



监听通知机制


客户端注册监听它关心的任意节点,或者目录节点及递归子目录节点


如果注册的是对某个节点的监听,则当这个节点被删除,或者被修改时,对应的客户端将被通知


如果注册的是对某个目录的监听,则当这个目录有子节点被创建,或者有子节点被删除,对应的客户端将被通知


如果注册的是对某个目录的递归子节点进行监听,则当这个目录下面的任意子节点有目录结构的变化(有子节点被创建,或被删除)或者根节点有数据变化时,对应的客户端将被通知。


注意:

  1. 所有的通知都是一次性的,及无论是对节点还是对目录进行的监听,一旦触发,对应的监听即被移除。
  2. 递归子节点,监听是对所有子节点的,所以,每个子节点下面的事件同样只会被触发一次。


ZK的应用场景


  1. 分布式配置中心
  2. 分布式注册中心
  3. 分布式锁
  4. 分布式队列
  5. 集群选举
  6. 分布式屏障
  7. 发布/订阅

相关文章
|
6月前
|
SQL 存储 运维
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
本文介绍了 Apache Doris 在菜鸟的大规模落地的实践经验,菜鸟为什么选择 Doris,以及 Doris 如何在菜鸟从 0 开始,一步步的验证、落地,到如今上万核的规模,服务于各个业务线,Doris 已然成为菜鸟 OLAP 数据分析的最优选型。
410 2
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
|
6月前
|
消息中间件 存储 数据采集
Apache InLong:构建10万亿级数据管道的全场景集成框架
Apache InLong(应龙)是一站式、全场景海量数据集成框架,支持数据接入、同步与订阅,具备自动、安全、可靠和高性能的数据传输能力。源自腾讯大数据团队,现为 Apache 顶级项目,广泛应用于广告、支付、社交等多个领域,助力企业构建高效数据分析与应用体系。
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
888 5
|
安全 算法 Java
MSE Nacos 2.3.2.0 发布,性能最多提升三倍,支持操作审计等安全特性
MSE Nacos 是阿里云推出的托管式注册配置中心。它基于阿里云开源产品 Nacos 构建,100% 兼容开源协议,同时在稳定性、安全性、性能、易用性等方面做了增强。不久前,我们发布了 MSE Nacos 2.3.2.0 版本,在性能、安全性方面大幅升级。
409 87
|
10月前
|
存储 SQL 关系型数据库
拉卡拉 x Apache Doris:统一金融场景 OLAP 引擎,查询提速 15 倍,资源直降 52%
拉卡拉早期基于 Lambda 架构构建数据系统面临存储成本高、实时写入性能差、复杂查询耗时久、组件维护复杂等问题。为此,拉卡拉选择使用 Apache Doris 替换 Elasticsearch、Hive、Hbase、TiDB、Oracle / MySQL 等组件,实现了 OLAP 引擎的统一、查询性能提升 15 倍、资源减少 52% 的显著成效。
478 6
拉卡拉 x Apache Doris:统一金融场景 OLAP 引擎,查询提速 15 倍,资源直降 52%
|
11月前
|
Java 网络安全 Apache
SshClient应用指南:使用org.apache.sshd库在服务器中执行命令。
总结起来,Apache SSHD库是一个强大的工具,甚至可以用于创建你自己的SSH Server。当你需要在服务器中执行命令时,这无疑是非常有用的。希望这个指南能对你有所帮助,并祝你在使用Apache SSHD库中有一个愉快的旅程!
760 29
|
12月前
|
SQL 缓存 数据处理
数据无界、湖仓无界,Apache Doris 湖仓一体典型场景实战指南(下篇)
Apache Doris 提出“数据无界”和“湖仓无界”理念,提供高效的数据管理方案。本文聚焦三个典型应用场景:湖仓分析加速、多源联邦分析、湖仓数据处理,深入介绍 Apache Doris 的最佳实践,帮助企业快速响应业务需求,提升数据处理和分析效率
728 3
数据无界、湖仓无界,Apache Doris 湖仓一体典型场景实战指南(下篇)
|
12月前
|
存储 运维 监控
从 ClickHouse 到 Apache Doris:在网易云音乐日增万亿日志数据场景下的落地
日志数据已成为企业洞察系统状态、监控网络安全及分析业务动态的宝贵资源。网易云音乐引入 Apache Doris 作为日志库新方案,替换了 ClickHouse。解决了 ClickHouse 运维复杂、不支持倒排索引的问题。目前已经稳定运行 3 个季度,规模达到 50 台服务器, 倒排索引将全文检索性能提升7倍,2PB 数据,每天新增日志量超过万亿条,峰值写入吞吐 6GB/s 。
885 5
从 ClickHouse 到 Apache Doris:在网易云音乐日增万亿日志数据场景下的落地
|
存储 运维 监控
金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践
中信银行信用卡中心每日新增日志数据 140 亿条(80TB),全量归档日志量超 40PB,早期基于 Elasticsearch 构建的日志云平台,面临存储成本高、实时写入性能差、文本检索慢以及日志分析能力不足等问题。因此使用 Apache Doris 替换 Elasticsearch,实现资源投入降低 50%、查询速度提升 2~4 倍,同时显著提高了运维效率。
765 3
金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践
|
存储 分布式计算 druid
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
378 1
大数据-149 Apache Druid 基本介绍 技术特点 应用场景

推荐镜像

更多