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

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

文章持续更新

一、前言

作为一名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. mybatis 日志实现 学习总结03

    日志 1.为什么要使用日志 使用日志能对项目: 调试:日志便于记录程序在之前的运行结果 错误定位 数据分析:日志中蕴含了大量的用户数据,包括点击行为,兴趣偏好等,对公司下一步的战略方向有一定指引作用. ...

  2. 35 异常机制 异常处理机制 异常处理五个关键字 try、catch、finally、throw、thorws 代码

    异常处理机制 概念 抛出异常 捕获异常 异常处理五个关键字 try.catch.finally.throw.thorws 代码 // main { int a = 1; int b = 0; // 假 ...

  3. CF1327F题解

    首先第一步,位运算拆位.变为一个区间的 \(And\) 为 \(0\) 或 \(1\). 如果 \(And\) 为 \(1\),那么所有数都需要为 \(1\),否则为 \(0\). 我们把所有可能为 ...

  4. LGP6144题解

    冲了50分钟外加10分钟厕所才冲出来,请问我还有救吗. 看上去像是金组题目的加强版,实际上是金组题目的魔改版. 还是考虑像弱化版那样按照左端点排序,并且记录答案的 \(0\sim k\) 次幂和. 然 ...

  5. LGP4284题解

    这个题,题面是[],出题人也是个[] 真就只放前向星过,把 vector 和离线建图都卡了... 题意: 一棵树,一条边有 \(p_i\) 的概率连接两个节点,一个点有 \(P_i\) 的概率亮着,问 ...

  6. mybatis连接sql

    mysql6以上  com.mysql.cj.jdbc.Driver

  7. 统计&分析 EXCEL:count、counta、countblank、countif和countifs函数分享

    一.count 计算区域中包含数字的单元格的个数以及参数列表中的数字的个数. 利用函数COUNT可以计算单元格区域或数字数组中数字字段的输入项个数. 示例: 1.我要是写成=COUNT(B1,D1), ...

  8. DataStage中Transformer的函数大全

    一. 类型转换函数 类型转换函数用于更改参数的类型. 以下函数位于表达式编辑器的"类型转换"类别中.方括号表示参数是可选的.缺省日期格式为 %yyyy-%mm-%dd. 以下示例按 ...

  9. 使用过 Redis 分布式锁么,它是什么回事?

    先拿 setnx 来争抢锁,抢到之后,再用 expire 给锁加一个过期时间防止锁忘记了 释放. 这时候对方会告诉你说你回答得不错,然后接着问如果在 setnx 之后执行 expire 之前进程意外  ...

  10. Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法 ?

    1.关闭缓存 swap; 2.堆内存设置为:Min(节点内存/2, 32GB); 3.设置最大文件句柄数: 4.线程池+队列大小根据业务需要做调整: 5.磁盘存储 raid 方式--存储有条件使用 R ...