博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zookeeper学习总结一
阅读量:7120 次
发布时间:2019-06-28

本文共 2120 字,大约阅读时间需要 7 分钟。

hot3.png

kafka单个组内的消费者集群的负载均衡策略如下:

每个分区针对同一个Group只能挂在一个消费者,即每个分区至多同时允许被一个消费者进行消费

如果同一个group的消费者数目大于分区数目,则多出来的消费者将不再参与消费

如果同一个group的消费者数目小于分区数目,则有部分消费者需要额外承担消费的任务

 

 

 

消息消费位点offset存储

 

dubbo中基于zookeeper实现的服务注册中心消息

 

zookeeper的应用场景数据发布/订阅,负载均衡,命名服务,分布式协调.通知,集群管理,master选举,分布式锁m分布式队列等分布式应用场景

 

 

系统模型

 

 

数据模型  树

 

节点特性 PERSISTENT,EPHEMERAL,SEQUENTIAL,状态信息

 

 

版本 保证分布式数据原子性操作 version cversion aversion

 

悲观锁:PCC,并发控制策略,有强烈的独占和排他特性,能够有效避免不同事务对同一数据并发更新而造成的数据一致性问题。实现中,如果一个事务正在对数据进行操作,那么在整个处理过程中,都会将数据处于锁定状态。也就是说对于一份独立的数据,系统只分配了一把唯一的钥匙,谁拥有了这把钥匙,谁就有权利更新这份数据,适合用于解决那些对于数据更新竞争十分激烈的场景

 

乐观锁,OCC相对应PCC来说是一种更加宽松友好的并发控制策略。乐观锁正好相反,假定多个事务在处理过程中不会彼此影响,因此在事务处理的大部分时间里不需要进行加锁处理,并发中,就一定会存在数据更新冲突的可能。在悲观锁中,在更新请求提交之前,每个事务都会首先检查当前事务读取数据后,是否有其他事务对该数据进行了修改,如果其他事务有更新的话,那么正在提交的事务就需要回滚。适用于那些数据并发竞争不大,事务冲突较少的应用场景中。

乐观锁的事务控制可以分为如下三个阶段:数据读取,写入校验和数据写入,写入校验满足CAS原则

 

 

 

 

 

 

Watcher

watcher接口和watcher事件

KeeperState 和EventType两个枚举类

回调方法process()

三个过程:客户端注册watcher,服务端处理watcher和客户端回调watcher

WathcerManager

 

 

ACL访问权限控制

设置超级管理员权限

 

 

 

 

序列化与协议

jute序列化,协议,请求,响应

151238_ks5v_1866807.png

 

RequestHeader,xid用于记录请求发起的先后序号,用来确保单个客户端请求的响应顺序,type表示操作的类型

class RequestHeader {

int xid;

int type;

}

 

Request

ConnectRequest:会话创建

 

 

 

 

 

class ConnectRequest{

int protocolVersion;

long lastZxidSeen;

int timeOut;

long sessionId;

buffer passwd;

}

 

 

GetDataRequest{

ustring path;

Boolean watch;

 

……

}

 

class setDataRequest{

ustring path;

buffer data;

int version;

}

 

发起一次简单的获取节点数据的请求

 

 

Wireshark是一个网络封包分析软件

 

winpcap

winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为应用程序提供访问网络底层的能力。它用于windows系统下的直接的网络编程

 

151309_vuG0_1866807.png

响应头ReplyHeader

Class ReplyHeader{

int xid;

long zxid;

int err;

 

}

 

响应体

包含了所有的返回数据

ConnectResponse :会话创建

 

class ConnectResponse{

int protocalVersion;

int timeout;

long sessionId;

buffer passwd;

 

}

 

GetDataResposne:获取节点数据

class GetDataResponse{

buffer data;

Stat stat;

}

 

SetDataResponse :更新节点数据

class SetDataResponse{

Stat stat;

}

 

 

 

 

 

客户端工作原理

客户端整体结构

151324_jumq_1866807.png

 

 

 

会话

创建一次会话的大体上的16个步骤

 

 

 

服务器地址列表

如何选择访问服务器的呢?

 

StaticHostProvider从serverA中依次获取一个可用的addresses,ServerAddresses,其中的address是一次性随机打散的

151338_yJsw_1866807.png

 

环形地址列表队列

 

 

 

ConnectStringParser做两个处理:解析chrootPath;保存服务地址列表

添加后缀来实现设置Chroot    例如 127.0.0.1:2181/apps/X

每一个应用都有独立的数据空间

服务端工作原理

 

 

数据存储

 

 

 

 

 

 

转载于:https://my.oschina.net/iioschina/blog/858364

你可能感兴趣的文章
angularJS中ng-if的用法
查看>>
ios打包ipa的四种实用方法(.app转.ipa)-备
查看>>
C++对象模型详解
查看>>
深入分析面向对象中的封装作用
查看>>
蒙特卡洛方法学习(一)
查看>>
Choose GitLab for your next open source project
查看>>
专注docker安全:Security Scanning
查看>>
旺信UWP正式版发布
查看>>
Quartz实用二三事
查看>>
泛型Class<T>和 T. <T>
查看>>
mysql:恢复mysql表结构
查看>>
Java编程的逻辑 (49) - 剖析LinkedHashMap
查看>>
dotnet反编译工具大全
查看>>
Canvas模糊化处理图片、毛玻璃处理图片之stackblur.js
查看>>
lsm-tree
查看>>
DNS-3
查看>>
在github上建立自己的网站
查看>>
struts-hibernate-ajax完成区县和街道级联下拉框功能(二补充使用json解析list结果集,ajax循环json层级处理)...
查看>>
Socket.io 延伸
查看>>
JAVA:通过poi读取excel
查看>>