01,大数据总结,zookeeper

1 ,zookeeper :概述

1.1,zookeeper:作用

1 ,大数据领域 :存储配置数据

例如:hadoop 的 ha 配置信息,hbase 的配置信息,都存储在 zookeeper

2 ,应用领域 :分布式锁

分布式锁,虽然 zk 也能做,但是更加推荐使用 redis ,更合适。

1.2,zookeeper:开发 - java

java 语言开发的。

1.3,qps :10w

1 ,3 台主机的 zk 集群,qps 可以达到 :10w 左右。

1.4 ,zk 会脑裂吗 :

不会

1.5,推荐 :很好的文章

html 复制代码
https://blog.csdn.net/qq_37555071/article/details/114609145?ops_request_misc=%257B%2522request%255Fid%2522%253A%25221EFE1594-87AD-4F31-8393-3111ECF369D5%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=1EFE1594-87AD-4F31-8393-3111ECF369D5&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-114609145-null-null.142^v100^pc_search_result_base4&utm_term=zookeeper%20zxid&spm=1018.2226.3001.4187

2 ,zookeeper :架构

2.1,架构图 :

2.2,leader :主节点

1 ,角色 :

集群的主节点

2 ,作用 :

1 ,处理客户端请求 :读,写。

2 ,服务器内部 :调度者,将写请求,发送给每个系节点。

3 ,事务:保证事务处理的有序性。

2.2,follower :从节点

1 ,角色 :

集群的从节点

2 ,作用 :

1 ,处理客户端请求 :读。

2 ,写请求 :转发给 leader 处理。

3 ,选举:leader 挂了,follower 要参与 leader 选举。

4 ,存储:leader 存储数据的时候,需要每个从节点,根据leader提议,在本地存储数据。

2.3,observer :观察者节点

1 ,角色 :

集群的从节点

2 ,作用 :

1 ,处理客户端请求 :读。

2 ,写请求 :转发给 leader 处理。

3 ,选举:不参与

4 ,同步:从主节点同步数据。

3 ,zookeeper :数据处理

3.1,最终一致性 :

意义 :数据同步不及时,但是最终,数据是一致的。

3.2,获取 :最新数据

1 ,由于 :

zookeeper 的数据更新,不及时。

2 ,client 想获取最新数据,需要在读取数据前,先调用这个接口 :

sync()

3 ,sync() 作用 :

1 ,目的 :client 连接的当前从节点,向 leader 发请求,需要同步最新数据。

2 ,leader 响应 :如果没有心数据,直接返回响应【Leader.SYNC】

如果有新数据,需要处理完最新数据,才返回响应【Leader.SYNC】,从节点收到响应后,将最新数据,返回给 client 。

3.3,数据操作 :写入流程,leader

1 ,leader 接收请求

2 ,leader 发送 proposal 给 follower

3 ,follower 收到请求记录 txlog、snapshot、

4 ,follower 发送 ack 给 leader

5 ,commit :leader 收到 ack 后进行 commit,并且通知所有的【follower,observer】

6 ,leader 返回成功给客户端

3.4,数据操作 :写入流程,follower

1 ,follower 接受请求,解析请求。

2 ,转发 :follower 将写请求转发给 leader

3 ,leader接收请求

4 ,leader 发送 proposal 给 follower

5 ,follower 收到请求记录 txlog、snapshot、

6 ,follower 发送 ack 给 leader

7 ,commit :leader 收到 ack 后进行 commit,并且通知所有的【follower,observer】

8 ,follower 返回成功给客户端。

3.5,数据操作 :写入流程,observer

1 ,observer 接受请求,解析请求。

2 ,转发 :observer 将写请求转发给 leader

3 ,leader接收请求

4 ,leader 发送 proposal 给 follower

5 ,follower 收到请求记录 txlog、snapshot、

6 ,follower 发送 ack 给 leader

7 ,commit :leader 收到 ack 后进行 commit,并且通知所有的【follower,observer】

8 ,observer 返回成功给客户端。

3.6,数据操作 :写入流程,注意

1 ,leader 发送 proprsal 决议 :

只给 follower 发送

3.7,数据存储 :内存 + 磁盘

1 ,内存数据 :

1 ,数据结构 :3 种

DataNode :数据节点,最小单元,存储数据

DataTree :树形结构中的节点,是 map [ path , node ]

临时节点,也是 map [ sessionId , node ]

ZKDataBase :内存数据库,管理所有会话和数据。

定期备份 :定时的将内存数据,同步到磁盘。

zk 重启 :从磁盘恢复数据到内存。

2 ,磁盘数据 :快照

定期快照

3 ,磁盘数据 :日志

每个请求,都会立刻产生日志流水

3.8,快照 :步骤

1 ,目的 :将所有数据,一次性,同步到磁盘

2 ,检查 :每进行一次事务日志记录之后,Zookeeper都会检测当前是否需要进行数据快照。

3 ,快照注意 :尽量避免 Zookeeper 集群中的所有机器在同一时刻进行数据快照。

4 ,快照时机 :

1 ,10w 个事务性日志流水

2 ,事务文件大小 :4g

5 ,异步线程:创建单独的异步线程来进行数据快照以避免影响Zookeeper主流程。

6 ,快照数据文件名:Zookeeper根据当前已经提交的最大ZXID来生成数据快照文件名。

7 ,数据序列化:首先序列化文件头信息,然后再对会话信息和 DataTree 分别进行序列化,同时生成一个Checksum,一并写入快照数据文件中去。

3.9,事务 :zxid

1 ,事务提交流程 :

1 ,初始化:当一个节点收到一个事务请求时,它会将事务请求发送给Leader。

2 ,提交:Leader会将事务请求发送给其他节点,并等待其他节点的确认。

3 ,确认:当其他节点收到事务请求后,它们会对事务进行处理,并将处理结果发送回Leader。

4 ,完成:当Leader收到足够多的确认后,它会将事务提交完成。

2 ,zxid :

1 ,类型 :long

2 ,意义 :每个事务操作,成功后,zxid 自增 1

4 ,zookeeper :数据 - znode

4.1,数据结构 :树形结构

zookeeper 数据存储在树形结构上

4.2,znode :数据节点

1 ,znode 节点 :

存储数据 :例如,abcde

路径 :例如,/a/b/c/d

4.3,znode :数据大小 - 1m

每个 znode ,只能存储最多 1m 数据

4.4,znode :版本号,乐观锁

1 ,znode 数据 :有版本号的

1 ,目的 :乐观锁,防止多线程的误操作

2 ,以下操作 :需要附加版本号

setData:更新znode的数据

delete:删除指定znode

checkExists:检查指定znode是否存在

getChildren:获取指定znode的子节点列表

getData:获取指定 znode 的数据

2 ,乐观锁 :

1 ,效果 :谁先抢到数据的版本号,就让版本号 +1 ,其它线程,版本号不对,操作失败。

2 ,性能 :比悲观锁,快

3 ,为什么快 :尽早发现自己版本号不对,尽早做别的决策

4.4,znode :watcher - 观察者

1 ,可监听的事件 :4 种

节点创建

节点删除

节点数据改变

节点的子节点列表发生变更。

2 ,监听器 :特点

1 ,一次性 :每次注册监听器,只能粗发一次

2 ,触发机制 :回调函数。

3 ,通知顺序 :按照监听器的注册顺序,依次触发。

4 ,修改触发 :版本号,不看数据内容,只看数据版本。

4.5,znode :节点类型

1 ,持久节点(PERSISTENT)

存储 :普通数据

2 ,持久顺序节点(PERSISTENT_SEQUENTIAL)

存储 :序列自增数据

3 ,临时节点(EPHEMERAL)

存储临时,普通数据

4 ,临时顺序节点(EPHEMERAL_SEQUENTIAL)

存储临时,序列自增数据

5 ,zookeeper 应用 :分布式锁

5.1 ,目的 :多线程,保护数据

1 ,例如 :mysql 的某个数据的操作,只能有一个系统访问,但是,有多个系统,都在使用 mysql ,怎么办 ?

2 ,操作步骤 :

1 ,选择路径 :例如 /app/kd/qcs

意义 :将多个线程,创建的节点,都放这里

2 ,创建 :临时顺序节点

意义 :每个线程都创建一个节点,这些节点,序号自增

效果 :/app/kd/qcs/lock_00000001

/app/kd/qcs/lock_00000002

/app/kd/qcs/lock_00000003

3 ,获取锁 :

序列编号最小的,得到锁。

4 ,注册监听 :

其它节点,注册监听事件,监听比他小 1 的节点,消失事件。

5 ,释放锁 :

边界代码【线程安全部分】执行结束,删除临时节点,释放锁。

触发 :watcher 事件,下一个线程,执行监听逻辑。

6 ,下一个线程 :获取锁

检查编号,我是不是最小的,如果是,我开始执行代码。

相关推荐
qr9j42233几秒前
elasticsearch 如果按照日期进行筛选
大数据·elasticsearch·jenkins
DavidSoCool7 分钟前
es分页边界数据重复问题处理
大数据·elasticsearch·搜索引擎
路由侠内网穿透13 分钟前
本地部署开源流处理框架 Apache Flink 并实现外部访问
大数据·网络协议·tcp/ip·flink·服务发现·apache·consul
qq_5470261792 小时前
Elasticsearch 正排索引
大数据·elasticsearch·jenkins
宝哥大数据3 小时前
Flinksql--订单宽表
大数据·flink
jinan8865 小时前
企业的移动终端安全怎么管理?
大数据·网络·安全·数据分析·开源软件
叶辰 .5 小时前
ES使用聚合aggregations实战(2025.04.02更新)
大数据·elasticsearch·jenkins
zxsz_com_cn5 小时前
风电行业预测性维护解决方案:AIoT驱动下的风机健康管理革命
大数据·运维·人工智能
说私域14 小时前
基于开源AI大模型与S2B2C模式的线下服务型门店增长策略研究——以AI智能名片与小程序源码技术为核心
大数据·人工智能·小程序·开源
V_HY1476215 小时前
AI碰一碰发视频获客工具,系统开发逻辑详细解析
大数据·人工智能·新媒体运营·流量运营