一. 数据发布/订阅
Zookeeper采用推拉相结合的方式,客户端在启动时会主动到Zookeeper服务端上进行一次信息的获取,同时在指定节点上注册一个Watcher监听,信息发生变更时,服务端会向相应的客户端发送Watcher事件通知,客户端接收到这个通知后,主动到服务端获取最新的数据;
二. 命名服务
在分布式系统中,被命名的实体通常可以是集群中的机器,提供的服务地址或远程对象等,都可以统称为名字,其中较为常见的是一些分布式框架中的服务地址列表;
Zookeeper提供的命名服务功能与JNDI技术有相似的地方,都可以帮助系统通过一个资源引用的方式来实现对资源的定位与使用;
每一个数据节点都能够维护一份子节点的顺序序列,当客户的对其创建一个顺序子节点的时候,Zookeeper会自动以后缀的形式在其子节点上添加一个序号;
三. 分布式协调/通知
特有的Watcher注册与异步通知机制,能够很好的实现分布式环境下不同机器,甚至是不同系统之间的协调与通知,从而实现对数据变更的实时处理;
四. 集群管理
集群管理包括集群监控与集群控制两大块,前者侧重对集群运行时状态的收集,后者对集群进行操作与控制;
利用Zookeeper的Watcher监听和临时节点特性,可以实现一种集群机器存活性监控的系统,例如在节点上注册一个Watcher监听,那么但凡进行动态添加机器的操作就会在该节点下创建一个临时节点,这样系统就能够实时检测到机器的变动情况;
五. Master选举
利用Zookeeper的强一致性,能够很好的保证在分布式高并发情况下节点的创建一定能够保证全局唯一性,即Zookeeper将会保证客户端无法重复创建一个已经存在的数据节点;客户端集群同时创建一个相同的临时节点,创建成功的即为Master,创建失败的注册节点变更的Watcher;
六. 分布式锁
排他锁:
在Zookeeper上通过一个节点表示一个锁;
在需要获取排它锁时,所有客户端都会试图通过create() 方法创建一个临时子节点,但最终只有一个客户端可以创建成功,即获取了锁;
执行完毕后,主动删除临时节点,即释放锁;
Zookeeper通过Watcher监听通知其他注册了的客户端重新获取锁;
共享锁:
在Zookeeper上通过一个节点表示一个锁;
需要获取锁需要往子节点上创建一个临时顺序节点;
读请求向比自己序号小的最后一个写请求节点注册监听;写请求向比自己序号小的最后一个节点注册监听;
如果没有比自己序号小的节点了则获取锁;
实现逻辑后删除临时节点;
七. 分布式队列
FIFO队列和Barrier模型的实现都类似于共享锁的实现;
八. Kafka
Broker注册:
使用Zookeeper来进行所有的Broker管理;
Broker服务器在启动时会通过创建临时节点的方式注册自己的Broker ID到Zookeeper,创建完后,将自己的IP地址和端口等信息写入该节点;
Topic注册:
Broker服务器启动后,会到对应的Topic节点下通过创建临时节点的方式注册自己的Broker ID,并写入针对该Topic的分区总数;
消费者注册:
每个消费者服务器在启动时,创建一个属于自己的消费者临时节点,将自己订阅的Topic信息写入该节点;
对自己所属消费者分组中的其他消费者节点进行监听,有变化时触发消费者的负载均衡;
对Broker服务器的变化注册监听;
原文:https://www.cnblogs.com/bbbbs/p/12548669.html