背景
继续前面的zookeeper学习的专题,这次主要是结合项目中遇到的一些问题,进一步学习了下zookeeper的一些内部机制。
针对以下几个问题:
1. zk是否可以保证watcher事件不丢失?
2. zk的EPHEMERAL节点的自动过期时间?
3. zk的如何保证节点数据不丢失?
如果你已经非常清楚这以上的几个问题,看官们可以不用往下看了。
persit机制
zookeeper中的persit机制主要是通过本地disk进行持久化,在本地disk上会有个memory数据对象保持同步。
持久化实现:
ZKDatabase
DataTree (内存树)
FileTxnSnapLog (disk持久化)
committedLog (FileTxnSnapLog的一份内存数据cache,默认存储500条变更记录)
DataTree(内存树)
zookeeper本身的数据结构就是一个树结构
数据模型(DataTree):
DataNode (1:n)
data WatchManager (1:1,处理node节点的CRUD的变更事件,发送Watcher事件)
child WatchManager (1:1, 处理node子节点的变更事件,发送Watcher事件)
sessions (ephemerals)
DataNode模型:
parent
data byte[]
acl(安全)
stat(审计信息)
children
整个实现相对比较简单,就是查找一个树节点后进行响应的操作
FileTxnSnapLog (disk持久化)
持久化数据分两类:
TxnLog (类似于mysql/oracle的binlog/redolog)
SnapShot (DataTree的数据镜像)
刚开始最容易搞不清楚就是Txnlog和SnapShot的区别,SnapShot主要是定期对DataTree的数据做一个本地备份,TxnLog只是一些历史的版本变更日志(每次由写事件变化,就会写入到该日志中)。
如何使用
zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理,后面将会详细介绍 zookeeper 能够解决的一些典型问题,这里先介绍一下,zookeeper 的操作接口和简单使用示例。
常用接口列表
客户端要连接 zookeeper 服务器可以通过创建 org.apache.zookeeper. zookeeper 的一个实例对象,然后调用这个类提供的接口来和服务器交互。
前面说了 zookeeper 主要是用来维护和监控一个目录节点树中存储的数据的状态,所有我们能够操作 zookeeper 的也和操作目录节点树大体一样,如创建一个目录节点,给某个目录节点设置数据,获取某个目录节点的所有子目录节点,给某个目录节点设置权限和监控这个目录节点的状态变化。
Hadoop|
Apache Pig|
Apache Kafka|
Apache Storm|
Impala|
Zookeeper|
SAS|
TensorFlow|
人工智能基础|
Apache Kylin|
Openstack|
Flink|
MapReduce|
大数据|
云计算|
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....