Java笔试面试大数据学习之路

Zookeeper的问题整理

2018-10-06  本文已影响90人  小北觅

持续更新~~~~

Zookeeper典型应用场景有哪些?

ZooKeeper是一个高可用的分布式数据管理与协调框架。基于对ZAB算法的实现,使该框架保证了分布式环境中数据的一致性,也正是基于这样的特性,使得ZooKeeper解决很多分布式问题。
典型场景:

利用ZooKeeper有两个特性,就可以实时另一种集群机器存活性监控系统:
1. 客户端在节点 x 上注册一个Watcher,那么如果 x?的子节点变化了,会通知该客户端。
2. 创建EPHEMERAL类型的节点,一旦客户端和服务器的会话结束或过期,那么该节点就会消失。

例如,监控系统在 /clusterServers 节点上注册一个Watcher,以后每动态加机器,那么就往 /clusterServers 下创建一个 EPHEMERAL类型的节点:/clusterServers/{hostname}. 这样,监控系统就能够实时知道机器的增减情况,至于后续处理就是监控系统的业务了。

利用ZooKeeper的强一致性,能够保证在分布式高并发情况下节点创建的全局唯一性,即:同时有多个客户端请求创建 /currentMaster 节点,最终一定只有一个客户端请求能够创建成功。利用这个特性,就能很轻易的在分布式环境中进行集群选取了。

上文中提到,所有客户端创建请求,最终只有一个能够创建成功。在这里稍微变化下,就是允许所有请求都能够创建成功,但是得有个创建顺序,于是所有的请求最终在ZK上创建结果的一种可能情况是这样: /currentMaster/{sessionId}-1 ,?/currentMaster/{sessionId}-2 ,?/currentMaster/{sessionId}-3 ….. 每次选取序列号最小的那个机器作为Master,如果这个机器挂了,由于他创建的节点会马上小时,那么之后最小的那个机器就是Master了。

Zookeeper集群为什么要是奇数个?

Zookeeper集群节点数量为什么要是奇数个?
Zookeeper集群为什么要是单数

我的疑问:如果脑裂成n个1台主机的时候,zookeeper怎么防止这种情况?欢迎评论区解惑

Leader选举过程

参考这篇文章前半部分:http://www.cnblogs.com/leesf456/p/6107600.html
后面的选举细节有兴趣可以看

Zookeeper节点类型

1.持久节点(PERSISTENT)

所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点——不会因为创建该节点的客户端会话失效而消失。

2.持久顺序节点(PERSISTENT_SEQUENTIAL)

这类节点的基本特性和上面的节点类型是一致的。额外的特性是,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序。基于这个特性,在创建子节点的时候,可以设置这个顺序,那么在创建节点过程中,ZK会自动为给定节点名加上一个数字后缀,作为新的节点名。

3.临时节点(EPHEMERAL)

和持久节点不同,临时节点的生命周期和客户端会话绑定。也就是说,如果客户端会话失效,那么这个节点就会被自动清除掉。注意,临时节点下不能创建子节点。

4.临时顺序节点(EPHEMERAL_SEQUENTIAL)

此节点属于临时节点,不过带有顺序。利用这个特性做分布式锁

分布式锁

实例Demo
Zookeeper实现分布式锁

zookeeper是如何保证事务的顺序一致性的?

zookeeper采用了递增的事务Id来标识,所有的proposal都在被提出的时候加上了zxid,zxid实际上是一个64位的数字,高32位是epoch用来标识leader是否发生改变,如果有新的leader产生出来,epoch会自增,低32位用来递增计数。当新产生proposal的时候,会依据数据库的两阶段过程,首先会向其他的server发出事务执行请求,如果超过半数的机器都能执行并且能够成功,那么就会开始执行。

上一篇下一篇

猜你喜欢

热点阅读