IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> ZooKeeper -> 正文阅读

[大数据]ZooKeeper

一、入门

1. 概述

Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的程序。

  1. 基于观察者模式的分布式服务管理框架:文件系统+通知机制
  2. 负责存储和管理关心的数据,然后接受观察者的注册,一旦数据发生变化就会通知注册的观察者。
    在这里插入图片描述
    (1)服务端启动时去Zookeeper注册信息
    (2)客户端通过Zookeeper获取到当前在线服务器列表,并且监听
    (3)当服务器有节点下线时,Zookeeper通知客户端下线事件
    (4)客户端重新再去获取Zookeeper获取列表,并注册监听

2. 特点

在这里插入图片描述
(1)Zookeeper集群中,多个节点拥有一个Leader和多个Follower
(2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务
(3)集群中每个Server节点数据一致,Client连接哪个Server都一样
(4)更新请求顺序进行,来自同一个Client的更新请求暗器发送顺序依次执行
(5)数据更新具有原子性,要么一次更新全成功,要么就失败
(6)实时性,由于Zookeeper维护的数据很少,所以效率很高,Client能读到最新数据。

3. 数据结构

Zookeeper数据模型的结构与Unix文件系统很类似,整体上可以看作一棵树,
每个节点称作一个ZNode

  1. 每个ZNode默认能够存储1MB数据。
  2. ZNode存储的数据并非文件,而是直接是字符串
    在这里插入图片描述

4. 应用场景

统一命名服务:在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。如多个分布式服务器IP不同,但统一命名为同一个域名网址
统一配置管理:一个集群中,所有节点配置信息基本是一致的,因此要求对配置文件修改后,由Zookeeper管理配置可以快速同步到各个节点上。
统一集群管理:Zookeeper可以通过监听ZNode,来获取节点的实时状态变化
服务器节点动态上下线
软负载均衡:在Zookeeper中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求,实现负载均衡。

二、应用

启动/关闭Zookeeper

  1. 启动关闭Zookeeper服务器:运行zkServer.sh脚本
bin/zkServer.sh start
bin/zkServer.sh stop
bin/zkServer.sh status
  1. 启动关闭Zookeeper客户端: 运行zkCli.sh
bin/zkCli.sh -server hadoop102:2181	#连接指定服务器
bin/zkCli.sh #连接本地

在这里插入图片描述

三、内部原理

1. 监听器原理

 @Before   //获取客户端对象
public void init() throws IOException {
       connectString = "hadoop102:2181,hadoop103:2181,hadoop104:2181";
       int sessionTimeout = 10000; 
      //参数解读 1集群连接字符串  2连接超时时间 单位:毫秒  3当前客户端默认的监控器
       zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
           @Override
           public void process(WatchedEvent event) {
           }
       });
   }

public void lsAndWatch() throws KeeperException, InterruptedException {
    List<String> children = zkClient.getChildren("/atguigu", new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            System.out.println(event);
        }
    });
}

在这里插入图片描述

  1. main()线程创建Zookeeper客户端,此时就会产生两个线程:负责网络连接通信的connect和负责监听的listener
  2. connect线程通过匿名内部类的方式将注册的监听事件发送给Zookeeper
  3. 在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中
  4. Zookeeper监听到有数据或路径变化,就会将高消息发送给listener线程
  5. listener线程内部调用了process()方法

2. 选举机制

当Zookeeper第一次启动时

  1. server1 启动,首先server1给自己投一票,然后看当前票数是否超过半数,结果没有超过,这时候leader就没选出来,当前选举状态是Locking状态。
  2. server2 启动,首先server2先给自己投一票,因为当前集群已经有两台机器已启动,所以server1、server2会交换选票,交换后发现各自有一票,接下来比较myid 发现server2的myid值 > server2的myid值,此时server2胜出,最后server2有两票。最后再看当前票数是否半,发现未过半,集群的选举状态, 集训保持locking状态。
  3. server3启动, 首先自己投自己一票,server1和server2也会投自己一票,然后交换选票发现都一样,接着比较myid 最后server3胜出,此时server3就有3票,同时server3的票数超过半数。所以server3成为leader。
  4. server4和server启动,都发现当前集群已经有leader,自己自动成为follower

当Zookeeper已经在使用中并已存在数据

  1. 当已存在的leader宕机时,集群会重新选出一个leader,此时首先会比较每一台机器的czxid,因为czxid越大代表其操作的时间约靠后,说明其数据更加完整
  2. czxid最大的被选为leader。极端情况,czxid都相等的情况,那么就会直接比较myid。

3. 写数据流程

在这里插入图片描述

  1. 客户端向ZK集群中的一台机器server1发送写数据的请求
  2. server1收到请求后马上会通知leader有些数据的请求
  3. laader拿到请求后进行广播,让集群每一台机器都准备要写数据
  4. 集群中的所有机器接收到leader广播后都会回应leader
  5. leader再次进行广播开始写数据,其他机器收到广播后开始写数据
  6. 数据写入成功后回应leader,最后由leader来做整个事物的提交
  7. 当数据成功写入后,由最初和客户端发生连接的server1回应客户端数据写入成功。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-24 14:59:55  更:2021-10-24 14:59:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:03:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码