文档章节

zookeeper学习总结一

writeademo
 writeademo
发布于 2017/03/14 15:17
字数 1093
阅读 16
收藏 0

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序列化,协议,请求,响应

 

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这个项目的目的在于为win32应用程序提供访问网络底层的能力。它用于windows系统下的直接的网络编程

 

响应头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;

}

 

 

 

 

 

客户端工作原理

客户端整体结构

 

 

 

会话

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

 

 

 

服务器地址列表

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

 

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

 

环形地址列表队列

 

 

 

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

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

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

服务端工作原理

 

 

数据存储

 

 

 

 

 

 

© 著作权归作者所有

writeademo
粉丝 27
博文 681
码字总数 256388
作品 0
东城
私信 提问
分布式技术 -- ZooKeeper的综合练习

Hello,朋友们。我又来了。这次和大家分享下Zookeeper的一个综合练习!!!算是对这几天学习zookeeper的一个小总结。 一起学习,一起进步。继续沉淀,慢慢强大。希望这文章对您有帮助。若有写...

猫狗熊
09/09
14
0
Zookeeper集群节点数量为什么要是奇数个?

无论是公司的生产环境,还是自己搭建的测试环境,Zookeeper集群的节点个数都是奇数个。至于为什么要是奇数个,以前只是模糊的知道是为了满足选举需要,并不知道详细的原因。最近重点学习zoo...

薛定谔的旺
2018/12/27
210
0
ZooKeeper教程资源收集(简介/原理/示例/解决方案)

菩提树下的杨过: ZooKeeper 笔记(1) 安装部署及hello world ZooKeeper 笔记(2) 监听数据变化 ZooKeeper 笔记(3) 实战应用之【统一配置管理】 ZooKeeper 笔记(4) 实战应用之【消除单点故障】...

easonjim
2017/09/05
0
0
ZooKeeper分布式专题与Dubbo微服务入门

ZooKeeper分布式专题与Dubbo微服务入门 网盘地址:https://pan.baidu.com/s/1TN6BlftB2uvvyVR7IDmODQ 密码: e6zt 备用地址(腾讯微云):https://share.weiyun.com/5539X2S 密码:65b36i Zo...

人气王子333
2018/04/17
0
0
Kafka学习之四 Kafka常用命令

Kafka学习之四 Kafka常用命令 Kafka常用命令 以下是kafka常用命令行总结: 1.查看topic的详细信息 ./kafka-topics.sh -zookeeper 127.0.0.1:2181 -describe -topic testKJ1 2、为topic增加副...

舒文joven
2018/07/19
92
1

没有更多内容

加载失败,请刷新页面

加载更多

川普给埃尔多安和内堪尼亚胡的信

任性 https://twitter.com/netanyahu/status/1186647558401253377 https://edition.cnn.com/2019/10/16/politics/trump-erdogan-letter/index.htm...

Iridium
31分钟前
10
0
golang-mysql-原生

db.go package mainimport ("database/sql""time"_ "github.com/go-sql-driver/mysql")var (db *sql.DBdsn = "root:123456@tcp(127.0.0.1:3306)/test?charset=u......

李琼涛
59分钟前
5
0
编程作业20191021092341

1编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时 间。使用#define或const创建一个表示60的符号常量或const变量。通过while 循环让用户重复输入值,直到用户输入小于或等于0的值...

1李嘉焘1
59分钟前
7
0
Netty整合Protobuffer

现在我们都知道,rpc的三要素:IO模型,线程模型,然后就是数据交互模型,即我们说的序列化和反序列化,现在我们来看一下压缩比率最大的二进制序列化方式——Protobuffer,而且该方式是可以跨...

算法之名
今天
19
0
如何用C++实现栈

栈的定义 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压...

BWH_Steven
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部