zookeeper
badly1226
努力成就非凡,请不要在最该奋斗的年纪选择安逸
展开
-
手把手带你撸zookeeper源码-客户端如何发送数据到zk集群服务端的
接上篇文章继续分析手把手带你撸zookeeper源码-zookeeper客户端如何和zk集群创建连接上篇文章我们分析到了org.apache.zookeeper.ClientCnxn.SendThread#primeConnection 这个方法里面的代码,我粘贴几行比较重要的代码如下// 创建链接请求的对象 ConnectRequest conReq = new ConnectRequest(0, lastZxid, sessionTimeout..原创 2020-08-26 22:50:53 · 514 阅读 · 0 评论 -
手把手带你撸zookeeper源码-zookeeper客户端如何和zk集群创建连接
上篇文章手把手带你撸zookeeper源码-zookeeper集群如何接收客户端的连接的分析了zk集群通过监听2181端口,通过NIO的方式来等待客户端的连接,这篇文章我们主要分析一下看看客户端如何去和zk集群创建连接的客户端的入口类是org.apache.zookeeper.ZooKeeper, 如果大家通过原生的代码使用zookeeper客户端和服务段建立连接的时候,就是首先需要实例化一个Zookeeper对象,然后传递zk集群的节点ip和端口号,设置超时时间,以及监听器public Zo..原创 2020-08-25 22:46:35 · 792 阅读 · 0 评论 -
手把手带你撸zookeeper源码-zookeeper集群如何接收客户端的连接的
截止到目前为止, zookeeper集群启动时如何进行leader选举以及正常启动、故障恢复时zookeeper如何去恢复内存数据, 如何去leader中同步数据,这两大点都已经分析完了,感兴趣的小伙伴可以去看一下之前的文章手把手带你撸zookeeper源码系列目录接下里该分析客户端连接集群的代码了,如: 客户端如何和客户端建立的连接、会话是如何创建的、zk集群如何去维护会话的、客户端的创建、删除、修改、查询等操作、持久化节点、临时节点、以及监听通知如何实现的、写请求如何转发到leader上然后lea.原创 2020-08-22 18:05:37 · 456 阅读 · 0 评论 -
手把手带你撸zookeeper源码-zookeeper集群之间如何进行ping探活机制
上两篇文章手把手带你撸zookeeper源码-zookeeper故障重启时如何恢复数据(一)手把手带你撸zookeeper源码-zookeeper故障重启时如何恢复数据(二)已经详细的把zookeeper故障重启时如何恢复数据给详细的剖析完了,这篇文章我们继续剖析一下在leader和follower数据同步完成之后,leader还会继续做哪些事情,以及如何实现ping机制的在上篇文章讲到leader同步完数据之后,会发送一个UPTODATE的通知给follower,表示数据已经同步完毕,fo原创 2020-08-16 07:24:59 · 992 阅读 · 1 评论 -
手把手带你撸zookeeper源码-zookeeper故障重启时如何恢复数据(二)
上篇文章手把手带你撸zookeeper源码-zookeeper故障重启时如何恢复数据(一)分析了在zookeeper启动的时候从本地日志文件中如何恢复数据,先获取快照文件中的数据然后反序列化到内存中,接着再对日志文件进行增量逐条回放,本篇文章详细分析一下在启动的时候如何和leader建立连接,然后从leader中如何同步数据到本地内存的如果当前存在一个zookeeper集群,现在不管是对原有的zookeeper进行重启,还是新加入一台zookeeper节点,此时zookeeper要么是obse...原创 2020-08-15 18:10:49 · 992 阅读 · 0 评论 -
手把手带你撸zookeeper源码-zookeeper故障重启时如何恢复数据(一)
在之前的文章手把手带你撸zookeeper源码-zookeeper中follower启动的时候会做什么?有分析过一部分follower启动时会调用syncWithLeader(zxid)方法, 此时方法会从leader中同步数据,但是回过头来看,感觉分析的不够深入,所以准备单独拉取出来一篇文章,来分析一下当follower启动时如何恢复数据的其实当一个zookeeper进程启动加入现有集群时,会有以下几种情况:1、当前zookeeper是新增的服务器, 然后作为observer角色加入集群...原创 2020-08-13 22:31:23 · 1546 阅读 · 0 评论 -
手把手带你撸zookeeper源码-zookeeper的sessionId生成策略和follower调用链初始化
继上篇文章手把手带你撸zookeeper源码-zookeeper中follower启动的时候会做什么?,分析到了follower启动之后和leader建立了链接,并且把自己本地最新的zxid发送给leader,然后leader根据follower发送过来的zxid来判断如何把最新的数据同步给follower今天继续分析Learner.syncWithLeader()方法中的代码, 首先我们来看下面的一行代码zk.createSessionTracker();看字面意思是创建会话跟踪器,..原创 2020-08-09 12:07:36 · 650 阅读 · 0 评论 -
手把手带你撸zookeeper源码-zookeeper中follower启动的时候会做什么?
上篇文章手把手带你撸zookeeper源码-zookeeper通信序列化协议,简单说了一下zookeeper的jute序列化通信协议,写了一个简单的demo,以及如何避免粘包和拆包的,也顺带写了一点有关dubbo的序列化协议和如何自己自定义序列化协议回到上上篇文章手把手带你撸zookeeper源码-zookeeper确定好角色后会做什么?主要分析了zookeer中leader启动的时候都会做些什么事,分析到了leader启动的时候会对server.x=zk1:2888:3888,中的2888端...原创 2020-08-08 11:17:22 · 3344 阅读 · 0 评论 -
手把手带你撸zookeeper源码-zookeeper通信序列化协议
上篇文章分析到了zookeeper集群之间通信时用到了jute序列化协议,本篇文章来简单了解jute如何序列化和反序列化以及如何解决粘包拆包的问题的今天上网看了一下查了一下zookeeper jute,其实网上也有很多这方面的资料,我就简单的写了一个demo先来展示一下,最后给大家一点自己如何自定义传输协议,如何解决粘包拆包的问题...原创 2020-08-05 22:31:23 · 319 阅读 · 0 评论 -
手把手带你撸zookeeper源码-zookeeper确定好角色后会做什么?
接上文手把手带你撸zookeeper源码-zookeeper启动(五)leader选举投票归档-确认当前zk服务的角色上篇文章主要分析了leader选举的最终阶段,根据zk集群的相互投票之后,进行投票归档,然后判断某个zk获得投票数是否大于集群数量的一半,如果未超过一半,则继续下一轮的投票选举,如果有某个zk有超过一半的选票,则leader确定,然后其他zk服务则为follower或者observer不知道大家有没有搭建过三台zk的集群,如果你是按照myid从小到大依次启动三台服务器,一般情况下都.原创 2020-08-03 23:14:56 · 3474 阅读 · 0 评论 -
手把手带你撸zookeeper源码-zookeeper启动(五)leader选举投票归档-确认当前zk服务的角色
接上文手把手带你撸zookeeper源码-zookeeper启动(四)leader选举投票发送以及响应本篇文章主要来看看当每个zk接收到其他服务器发送过来的投票之后,接下来会怎么处理 //投票归档 recvset.put(n.sid, new Vote(n.leader, n.zxid, n.electionEpoch, n.peerEpoch)); if (termPredicate(rec..原创 2020-08-02 16:12:59 · 1342 阅读 · 0 评论 -
手把手带你撸zookeeper源码系列目录
手把手带你撸zookeeper源码(前言) 手把手带你撸zookeeper源码(配置文件) 手把手带你撸zookeeper源码(如何启动一个zookeeper服务) 手把手带你撸zookeeper源码-从源码角度分析zookeeper启动时都做了什么? 手把手带你撸zookeeper源码-zookeeper启动(二) 手把手带你撸zookeeper源码-zookeeper启动(三)(zookeeper选举时是如何基于socket建立连接的) ...原创 2020-08-01 22:45:29 · 609 阅读 · 1 评论 -
手把手带你撸zookeeper源码-zookeeper启动(三)(zookeeper选举时是如何基于socket建立连接的)
接上文手把手带你撸zookeeper源码-zookeeper启动(二)结合上两篇文章写的zookeeper启动时,都干了些什么,画了一张图,把涉及到的组件都在图中给展示出来,大家可以参考一下在这个图片中把之前写的源码中的所有组件都给包括了,以及每个组件是做什么用的,接下来我们会一步步的去梳理整个zookeeper源码,也会把这张图给进一步完善,最终形成一个完整的zookeeper架构原理图的上篇文章最后,我们知道调用到QuorumPeer.start方法中,在这个方法中做了好几件事,..原创 2020-08-01 17:37:08 · 648 阅读 · 1 评论 -
手把手带你撸zookeeper源码-zookeeper启动(二)
接上文手把手带你撸zookeeper源码-从源码角度分析zookeeper启动时都做了什么?先说点题外话,因为我想着把整个zookeeper源码分析作为系列文章来写,所以每一篇文章只会分析一部分源码,而不是长篇大论去粘贴源码,然后哪个方法进入哪个方法,然后一带而过。而是抓住主线,然后去分析主要方法,用我的理解,用通俗的语言通过书面的形式表达出来,希望对想学习zookeeper源码的你有帮助先抛出个目标,本篇文章主要写一下zookeeper集群之间是如何建立连接的?先贴一下上文最后的一段代码,有.原创 2020-07-29 23:11:12 · 411 阅读 · 0 评论 -
手把手带你撸zookeeper源码-从源码角度分析zookeeper启动时都做了什么?
前言上篇文章手把手带你撸zookeeper源码(如何启动一个zookeeper服务)主要是讲解了如何通过脚本启动一个zk服务,还有一些简单的基本操作,以及如何去根据我们的服务器配置来设置JVM参数,接下来的文章就开始干zk源码了,这篇文章我们先找找启动zookeeper服务的入口,然后看看zookeeper启动的时候都做写什么?看源码技巧相信各位小伙伴大家都应该看过源码,但很多时候看源码要么就是一掠而过,方法调用方法,进去出来,根本就没有想过为什么这么设计?有没有用什么设计模式?有没有...原创 2020-07-27 23:04:07 · 683 阅读 · 0 评论 -
手把手带你撸zookeeper源码(如何启动一个zookeeper服务)
前言上一篇文章手把手带你撸zookeeper源码(配置文件)讲解了一下zookeeper里面的配置文件中都有哪些配置,可以结合自己公司的生产环境去配置相应的信息或者针对性的优化。当然有些配置会在以后讲解相关源码的地方讲到,本篇文章主要是带着大家一步步去使用一下zookeeper,以及简单的一些操作,还有如何去配置zookeeper里面的一些JVM参数启动zookeeper进程第一步: 修改配置文件大家把之前下载好的apache-zookeeper-3.6.1-bin.tar.gz文...原创 2020-07-26 07:15:14 · 1177 阅读 · 0 评论 -
手把手带你撸zookeeper源码(配置文件)
前言在上一篇手把手带你撸zookeeper源码(前言)中zookeeper源码系列文章的一些问题和准备工作,看一个框架或者系统源码是需要循序渐进的逐步学习,不能一口吃个胖子,一飞冲天成为专家或者高手,需要踏实放下心,慢慢磨练自己的底层技术能力。在我们手动启动一个zookeeper server时,会先让你上网下载apache-zookeeper-3.6.1-bin.tar.gz, 然后解压到本地目录里面,接着会让你修改conf/zoo_sample.cfg配置文件为zoo.cfg,然后进入bin目录下执原创 2020-07-25 13:48:51 · 1252 阅读 · 0 评论 -
手把手带你撸zookeeper源码(前言)
先提出两个问题:1、我们用zookeeper来做什么事?2、你所熟知的业务系统、分布式中间件系统中都有哪些使用了zookeeper?用zookeeper做了什么事?前言 既然标题写的是手把手的带你撸zookeeper源码,那么我们总要有一个开头,那怎样学习一个中间件系统呢?首先你得我们得知道它用来干什么的?主要有哪些功能?你让有必须使用它的优点,同时也要考虑各种特殊情况下,它可能会出现什么问题?比如故障宕机、数据丢失、是否支持高并发、高可用等问题。把它的功能摸清楚之...原创 2020-07-25 07:56:35 · 742 阅读 · 0 评论