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这个项目的目的在于为应用程序提供访问网络底层的能力。它用于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
每一个应用都有独立的数据空间
服务端工作原理
数据存储