作者:李小欠儿724_579 | 来源:互联网 | 2023-08-07 13:59
前言
zookeeper是一个高可用、高性能的开源的分布式框架,具有保证客户端顺序一致性,原子性,顺序访问等特点。通过zookeeper可以实现发布/订阅,leader选举,分布式锁,分布式协调。元数据管理等功能。
基本概念
集群角色
zookeeper 将集群节点分为三种角色:
Leader角色:负责处理读写请求,同步数据Follower节点;
Follower角色:参与Leader选举,参与Leader写时的数据同步(过半节点写入),。负责处理读请求,而写请求需要转发给Leader节点去处理;
Observer角色:不参与Leader选举,不参与Leader写时的数据同步(过半节点写入),只提供读服务和同步leader节点数据。
zookeeper集群只有Leader节点才可以处理写请求,其他节点最多也只能提供读服务,因此,zookeeper集群的写性能并不高,适合读多写少的场景。
数据节点
zookeeper数据结构是树状结构,每一个数据就是一个节点,节点分为持久节点和临时节点,持久节点持久化存储到磁盘,除非主动删除,临时节点只存在session会话有效期内,session会话结束了临时节点会被清理掉。
Session会话
客户端和zookeeper服务建立连接之后,zookeeper服务会为客户端创建一个session会话保存到内存,并为客户端分配一个sessionId,在sessionTimeout时间内这个会话都是有效的,客户端通过发送读写请求和心跳请求都会更新sessionTimeout的超时时间,如果超过sessionTimeout时间没有通信,服务端和客户端都会关闭当前连接。
这里有个点需要注意的是,客户端和Follower节点建立连接也会创建session会话信息,Follower节点会将这些session会话信息转发给Leader节点,因此,就算客户端通过Follower节点转发到Leader节点上创建临时节点,Leader也能知道这些临时节点是由哪些session会话创建的。
Watcher监听器
客户端通过监听器,注册一些感兴趣的事件,当zookeeper服务端有事件变更,便会通知到客户端。