哈喽!大家好,我是小奇,一位不靠谱的程序员

小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧

文章持续更新

一、前言

作为一名Java拧螺丝选手,不必要掌握造火箭的能力就可以工作,但是面试官偏偏要难为兄弟们,这我就有点看不下去了,我只能带上家里的火箭当场向面试官证明自己。

虽然我这个二踢脚可能算不上火箭,但是跟火箭的原理差不多,都是点火往天上发射的,我掌握了这个就相当于掌握了造火箭的能力。

关键是我这玩意它好使呀,往面试官桌子上一摆,面试官直接跟我谈薪资了,会造火箭就是不一样。

至于你问为什么面试官明明只招拧螺丝的选手,但是却问火箭的底层原理、火箭的集群怎么搭建,怎么保证火箭的投递可靠性(发射失败我就再发射一颗),怎么保证火箭的幂等性(同一颗火箭发射多次和发射一次是一样的效果)

这个问题就不需要你去问面试官啦,我上次已经问过了,面试官的回答让我哑口无言。。。

我:面试官您好,请问为什么招我进去拧螺丝,却问我火箭的底层原理呢?

面试官:这特么还不都怪你们。。。

我:我们?我们怎么了。。。

面试官:十年前我面试员工,那个时候只有一部分人说会拧螺丝,我面试一个录取一个。

面试官:八年前我面试员工,所有人都说会拧螺丝了,我不知道该录取谁了,然后有一两个人说他会造摩托,我一听这俩人不错呀,毕竟我也刚刚只会造摩托就这俩吧,花拧螺丝的钱招了两个造摩托的

面试官:五年前我面试员工,所有人都说会造摩托了,我又不知道该录取谁了,然后有一两个人说会造汽车,我心想这不错呀,我这的老员工没有会造汽车的,你既然会就来吧,工资给你比老员工高点。

面试官:三年前我面试员工,所有人都说会造汽车了,我又又不知道该录取谁了,然后有一两个人说会造火箭,我特么只能录取这两个会造火箭的了。。。,并且为了面试我还去学了一些火箭的原理,我们这个摩托车修理店根本用不到这些原理,但是没办法,谁让这些人这么卷呢。

面试官:今天,我只能面试会造火箭的人了,虽然他们进来也只会拧螺丝。。。

我:那既然说会造火箭的人也只会拧螺丝,那你为什么不直接录取只会拧螺丝的选手呢?

面试官:你以为我没有招收面试只会拧螺丝的吗,我招收了,结果。。。

我:结果怎么样?

面试官:他把公司唯一的火箭给拆了。。。

二、面试

在一个晴朗的周二,我来到了“决战天通苑、生死西二旗”中著名的西二旗桥下。

我怀着一颗忐忑的心走向即将要去赴约面试的公司,一路上我忐忑不安,不知道今天的面试会不会顺利,一会面试官会不会刁难我,接待我的hr小姐姐好不好看。。。

不知不觉我来到了公司楼下,打电话给hr,她说给你留门了,门没锁,直接上来吧。。。

HR:小奇是吧,带简历了吗?

我:带,带,带了。。。(吸溜),我把简历交给了HR,并急切的询问什么时候开始呢,我等不及了。。。

HR:别急嘛,先做一套笔试题

我:哦,我领取了一份笔试题,并来到了做题的会议室,这个会议室不大,但是坐满了人。。。

我:我做完了题后发现好基友微信群里问我在干嘛,我就随手拍了一张照片发给了他们,我不是故意拍答案的呀,但是这桌子太小人太多,毕竟0.8平米的桌子围着坐了8个人。。。

我:后来公司里人要开会,差点把我们正在做题的人撵走,我也是服了这个公司了,看我一会虐不虐他们的面试官就完了。

面试官:做一个自我介绍吧。

我:面试官你好,我本科毕业于山东翔蓝,精通挖掘机技术,研究生进入华清大学学习火箭研发技术,博士进入大北大学学习在火箭高并发发射情况下如何保证火箭一致性问题,不会造成误发射了其它队友的火箭。

三、Zookeeper集群模式与集群角色

面试官:可以呀小伙子,那你说说zookeeper集群有哪些模式吧

我:zookeeper集群无非有三种搭建方式,一是单机模式、二是伪分布模式、三是分布式模式。

面试官:嗯。zookeeper集群中都有哪些角色呢

我:有三种角色,一是Leader角色,可以处理读写请求,集群中只能有一个Leader角色,二是Follower角色,只能处理读请求,同时也是Leader的候选节点,如果Leader节点挂了,Follower节点就可以选举为Leader节点,三是Observer节点,该节点只能处理读请求,不能参与Leader的选举。

四、Zookeeper集群搭建方式

面试官:嗯,那你说说zookeeper集群搭建的具体步骤吧

我:首先我们下在zookeeper后有一个配置文件为zoo_sample.cfg,我们可以修改为zoo1.cfg这样更好记一些,然后我们编辑配置文件

dataDir=[保存数据的目录]

clientPort=[客户端连接zookeeper服务器的端口]

server.[数字表示第几台服务器]=[服务器的ip][服务器与集群中其他服务器通信的端口][表示如果Leader服务器挂了,用这个备用端口来进行选举][表示服务器的角色]

我这里配置好后就是一个集群的节点了,这里我们再将zoo1.cfg复制三个出来,表示另外三个集群节点,我这里是在一台机器上建立四个节点来搭建一个伪集群,真实的集群只要对应上ip地址和端口就可以了。

现在我们有四个cfg文件,分别为zoo1.cfg、zoo2.cfg、zoo3.cfg、zoo4.cfg,这四个文件只有clientPort不相同即可,因为客户端连接不同的服务器要有指定的端口号,这里我们在一台机器上搭建的伪集群,所以dataDir数据存储路径也应该设置为不同的。

这个时候我们来根据这四个配置文件来启动四个zookeeper实例。

这个时候我们会发现启动失败,因为需要我们设置标识ID,这个时候我们找到我们dataDir目录下,在我们的zookeeper1目录下新建一个myid文件,并且在里面写上1,然后在zookeeper2目录下也新建一个myid文件,并且在里面写上2,以此类推,然后我们再启动这四个配置文件。

这个时候我们发现启动成功了,我们可以使用status命令来查看各个节点的角色情况。

这个时候我们可以看到每个节点的角色了。

五、Zookeeper羊群效应

面试官:嗯,小伙子非常棒,你能说一下zookeeper羊群效应是怎么回事吗,如何避免呢

我:zookeeper用来实现分布式锁的时候,如果有一个客户端A拿到了锁,那么客户端B、C、D都会监听A有没有变化,如果A处理完业务释放了锁,那么这个时候B、C、D都监听到了消息,都会去抢锁,假如有一百个正在等待的,那么就会有100个上去抢锁,像羊群一样蜂拥而至。

我:这样的话就会造成资源的浪费,因为这么多节点被惊动了,但是拿到锁的只有一个节点,为何不只惊动一个节点呢。这里的话我们就要使用zookeeper的公平锁了。

六、Zookeeper公平锁怎么实现

面试官:嗯。那zookeeper公平锁怎么实现的呢

我:在上一次面试的时候我回答了zookeeper有哪些特性,其中就有一个临时顺序节点的特性,这个时候我们可以每一次都建立一个临时顺序节点,然后后一个节点监听前一个节点的变化,只有前一个节点有变化他才能感知到,再往前的节点变化他无法感知到,也就不存在抢锁的问题。

我:这样的话就可以通过临时顺序节点来实现公平锁。

面试官:小伙子真厉害啊,我这边没有什么要问的了,你还有什么问题要问(面试官两眼放光)

我:额。。。咱们公司的会议室就那一个吗,那里面的餐桌是不是有点小了。。。

面试官:哎呀,现在公司正在高速发展阶段,钱都用在了二手电脑的购买上,这样,你进来干两年,给公司挣了钱了咱们换个超大的桌子

我:(电脑还是二手的。。。)这样吧,我考虑考虑吧,我现在手上还有几个预约好的面试没有面呢,等我面完了再答复你吧。

面试官:行,你平时怎么学习呀,这么厉害

我:我通过看小奇的趣学编程系列,干货很多又非常有趣。

面试官:那你再给我推荐几个小奇趣学编程系列的读者过来吧,我急需人才

我:那你先买个大点的桌子吧放在会议室吧,人才也需要桌子才能办公(说罢我夺门而出,留下了潇洒的背影)

七、总结

这里关于zookeeper还没有整理完毕,文章后面持续更新,建议收藏。

文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。

如果觉得我的文章还不错的话就点个赞吧

面试官:Zookeeper集群怎么搭建?的更多相关文章

  1. 大数据平台搭建-zookeeper集群的搭建

    本系列文章主要阐述大数据计算平台相关框架的搭建,包括如下内容: 基础环境安装 zookeeper集群的搭建 kafka集群的搭建 hadoop/hbase集群的搭建 spark集群的搭建 flink集 ...

  2. Linux环境下ZooKeeper集群环境搭建关键步骤

    ZooKeeper版本:zookeeper-3.4.9 ZooKeeper节点:3个节点 以下为Linux环境下ZooKeeper集群环境搭建关键步骤: 前提条件:已完成在Linux环境中安装JDK并 ...

  3. zookeeper集群的搭建以及hadoop ha的相关配置

    1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...

  4. Solr集群的搭建以及使用(内涵zookeeper集群的搭建指南)

    1   什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候 ...

  5. [转]ZooKeeper 集群环境搭建 (本机3个节点)

    ZooKeeper 集群环境搭建 (本机3个节点) 是一个简单的分布式同步数据库(或者是小文件系统) ------------------------------------------------- ...

  6. zookeeper集群环境搭建详细图文教程

    zookeeper集群环境搭建详细图文教程 zhoubang @ 2018-01-02 [文档大纲] 友情介绍 软件环境 注意点 环境安装 1. 新建用于存储安装包以及软件安装的目录 2. 下载安装z ...

  7. Docker 一步搞定 ZooKeeper 集群的搭建

    Docker 一步搞定 ZooKeeper 集群的搭建 背景 原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 ...

  8. centos7下安装zookeeper&zookeeper集群的搭建

    一.centos7下安装zookeeper 1.zookeeper 下载地址 https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ 2.安装步骤 ...

  9. centos7 zookeeper集群的搭建

    说明:该集群的搭建是为了服务于solr集群,请参考我的关于solr集群搭建的博客. 1.创建solr-cloud目录 mkdir /usr/local/solr-cloud 2.将解压的apache- ...

  10. Zookeeper集群快速搭建

    Zookeeper集群快速搭建 1.cd /usr/local/zookeeper/conf(如在192.168.212.101服务器) mv zoo_sample.cfg zoo.cfg 修改con ...

随机推荐

  1. JQ,JQuery的ajax卡住了,浏览器页面卡住

    在使用ajax的时候浏览器卡住了, 经过测试是因为在ajax中使用的data数据变量写错了 不存在也不报错,直接卡主了 好好检查一下吧.

  2. 浅识 npm 与 cnpm

    npm是什么? Node Package(包) Manager(管理器) 的简称. 在 GitHub 还没有兴起的年代,前端是通过网址来共享代码.比如你想使用 jQuery,那么你点击 jQuery ...

  3. CF1476D题解

    场上 \(O(n)\) 切掉的一道挺水的题. 首先向左走和向右走,一个很明显的结论是,如果向左走了一段距离又回到原点,那么方向是不会变的,所以只需要求出能够向左走的最远距离和向右走的最远距离,加起来即 ...

  4. Java基础——类与接口

    一.类与接口的关系 1.类与类的关系 继承关系,只能单继承,不能多继承:但是可以多层继承 2.类与接口的关系 实现关系,可以单实现,也可以多实现,还可以继承一个类的同时实现多个接口 3.接口与接口的关 ...

  5. 4月2日 python学习总结

    昨天内容回顾: 1.迭代器 可迭代对象: 只要内置有__iter__方法的都是可迭代的对象 既有__iter__,又有__next__方法 调用__iter__方法==>得到内置的迭代器对象 调 ...

  6. RDMA--libibverbs代码分析(2)-设备发现

    基于上一篇文章https://www.cnblogs.com/xingmuxin/p/11057845.html 我们现在从分析libibverbs代码,跳入到分析内核代码,代码位置在./driver ...

  7. GET、POST请求

    GET和POST的区别主要有以下几个方面: 1.URL可见性: GET:参数URL可见: POST:URL参数不可见: 2.数据传输 GET:通过拼接URL进行传递参数: POST:通过body体传输 ...

  8. 关于Gradle 6.x及以上版本发布到仓库有很多CheckSum文件,想去除?

    写在前边 今天写的这个博客和平时的博客有点区别,大多数都是告诉你解决问题的,而本文不完全是. 经常使用Gradle的都知道 Gradle有两个发布制品到Maven仓库的插件:maven 与 maven ...

  9. 网络编程-Python的socket库

    一.网络连接经常用到的函数 sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)参数一:地址簇 socket.AF_INET IPv4(默认) ...

  10. 为什么 redis 需要把所有数据放到内存中?

    答Redis 为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数 据写入磁盘.所以 redis 具有快速和数据持久化的特征.如果不将数据放在内存中, 磁盘 I/O 速度为严重影响 redi ...