最近在看ZooKeeper的源码,在zookeeper中用LeaderZooKeeperServer , FollowerZooKeeperServer和ObserverZooKeeperServer 这三个类来实现三种类型的服务器节点。
他们之间的关系是这样的,我用viso画张图先:
Zookeeper采用了责任链模式处理他们之间的各种请求,接下来我逐一分析他们处理请求的过程:
1. LeaderZookeeperServer
LeaderZookeeperServer处理的过程的文字描述:
1、接收客户端的request请求
2、将会修改同步数据的request请求 转化为proposal,并保存。
3、向所有的follower发送proposal。
4、接收follower的ack。
5、统计收到的ack,如果某一个proposal的ack超过了半数,那么向所有follower发送commit 信令,并向所有observer发送inform信令,执行这个proposal的动作。
6、leader自己执行已经被commit的proposal所对应的操作,并回复结果。
我用一张图展示一下LeaderZookeeperServer的责任链:
详细流程如下:
2. FollowerZookeeperServer
FollowerZookeeperServer处理的过程的文字描述:
1、 发现leader。
2、 建立与leader的连接。
3、 向leader注册。(leader activation)
4、 与leader进行同步。
5、 无限循环
---读取从leader处接收到的信令。
---处理从leader处接收到的信令。
A、 如果是PROPOSAL信令(写请求),将此信令投递到FollowerZooKeeperServer的synProcessor。主要作用是回复leader一个ack。
B、 如果是COMMIT信令,将此信令投递到FollowerZooKeeperServer的commitProcessor。最终执行FollowerZooKeeperServer的commit函数。
C、 如果是SYNC信令,将此信令投递到FollowerZooKeeperServer的commitProcessor。commitProcessor直接将此信令转发给FinalRequestProcessor,将sync信令带的内容写入持久层。
我用一张图展示一下FollowerZookeeperServer的责任链:
详细流程如下:
3. ObserverZookeeperServer
ObserverZookeeperServer处理的过程的文字描述:
1、 发现leader。
2、 连接到leader上,建立TCP连接。
3、 与leader进行同步,同步leader上已经被commit的proposal。
4、 无限循环,读取接收到得信令,处理信令。
1、如果是syn信令,调用ObserverZooKeeperServer的syn函数,投递到commitProcessor中。
2、如果是info信令,同样调用ObserverZooKeeperServer的commit函数,投递到commitProcessor中。
OserverZookeeperServer的责任链基本上与follower的相同如下,只是commitProcessor调用的commit函数里的处理不同:
我用一张图展示一下ObserverZookeeperServer的责任链:
详细流程如下:
最后看一下ZK的源码中对SyncRequestProposal的解释,秒懂:
ps:画图不易,转载请注明。
欢迎大家批评指正。
相关推荐
源码原理分析:本质:服务端:org.apache.zookeeper.server.quorum.QuorumPeerMain单机、集群Start方法 线程、T
在第一节课,我们讲到了 zookeeper 的来源,是来自于 google chubby。为了解决在分布式环境下,如何从多个 server 中选举出 maste
事务的实现原理深入分析Watcher机制的实现原理ClientCnxn 初始化客户端通过 exists 注册监听cnxn.submitRequestSendThread 的发送过程client 和 server 的网络交互服务端接收请求处理流程处理客户端传送过来的数据包...
信息系统: 在企业、机构或组织中,信息系统是指由硬件、软件、人员、数据资源、通信网络等组成的,用于收集、处理、存储、分发和管理信息,以支持决策制定、业务运营和战略规划的系统。这类系统包括: 数据库管理...
业务需求:对已有交通数据进行分析建立模型,从而对未来交通堵车情况进行预测; # TrafficForecast SparkMLlib智慧交通项目 ## 项目需求 对已有交通数据进行分析建立模型,从而对未来交通堵车情况进行预测 ## 使用...
在解压缩的Kafka文件夹中,转到Windows目录,然后将server.properties中的'log.dirs'值修改为存在Kafka文件夹的目录,即C:/ kafka / kafka-logs类似地,修改zookeeper.properties中的'dataDir'到存在Kafka文件夹的...
bin/zookeeper-server-start.sh config/zookeeper.properties 启动Kafka服务器 nohup ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties > ~/kafka/kafka.log 2>&1 & 在默认端口27017上启动...
Spark:使用火花流功能,实时分析消息系统中的数据,完成计算分析工作。 Hbase:做为预先存储,存储spark计算结构,供其他系统进行调用环境部署软件版本hadoop版本:Hadoop相关软件如zookeeper,hadoop,hbase,...
使用以下命令启动 zooKeeper 节点,直到此目录 ../kafka_2.9.2-0.8.1.1/bin ./zookeeper-server-start.sh ../config/zookeeper.properties 湾使用以下命令启动 kafka 代理,直到 ../kafka_2.9.2-0.8.1.1/bin ./...
其基本原理是将HQL语⾔⾃动转 换成MapReduce任务,从⽽完成对Hadoop集群中存储的海量数据进⾏查询和分析。 Hive为单实例的服务进程,提供服务的原理是将HQL编译解析成相应的MapReduce或者HDFS任务,下图为Hive的结构...
bin / zookeeper-server-start.sh config / zookeeper.properties
防伪溯源系统java源码下载 基于大数据的安全态势感知系统 项目背景 一句话描述 : 通过Web日志分析,显示网站当前与历史状况 ...bin/zookeeper-server-start.sh config/zookeeper.properties sudo bin/kafka-serve
文章目录一、启动 Kafka二、创建 Topic 消息队列三、查询 kafka 消息队列四、启动 consumer 监控窗口五、写 Flume 自定义配置文件六、开启 Flume七、结果分析 一、启动 Kafka kafka-server-start.sh /opt/soft/kafka...
启动开发环境需要的外部服务(redis,kafka,zookeeper等) -------------eureka-server # 服务注册中心 -------------gateway-server # 基于zuul的网关服务 -------------iot-components # 通用组件 ------------------...
为实现数据的实时分析与高效访问,我们使用按行键、列名和时间戳全局排序的三维数据模型组织数据,使用多级Cache系统,充分利用新一代服务器硬件大内存、SSD盘和万兆网卡的性能优势,做到模型灵活的同时,实现了高...
- 统一下单(统一下单接口、统一扫码)、订单管理、数据分析、财务报表、商户管理、渠道管理、对账系统、系统监控。 ![统一扫码支付](project-bootstrap/zheng-pay.png) > zheng-ucenter 通用用户管理系统, 实现...
提供一个开源的物联网管理平台,支持各种设备接入,并完成数据上报,分析,处理等自定义功能。 技术栈 java8,maven3 :整合各种组件 :对微服务提供支持 :基础业务框架 :物联网通信(mqtt,udp) :redis...
使用Zookeeper来替换Eureka 25 Consistency(一致性), 数据一致更新,所有数据变动都是同步的 Availability(可用性), 好的响应性能 Partition tolerance(分区容忍性) 可靠性 28 客户端负载均衡器 29 客户端负载...
分布式架构的核心思想是采用大量廉价的PC Server,构建一个低成本、高可用、高可扩展、高吞吐的集群系统,以支撑海量的用户访问和数据存储,理论上具备无限的扩展能力。分布式系统的设计,是一门复杂的学问,它涉及...