字节跳动大数据开发面经答案汇总之zookeeper篇

1.zookeeper简单介绍一下,为什么要用zk?

Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目(文件系统+通知机制)

zk的应用场景:

  • 统一命名服务:在分布式环境下,经常需要对服务进行统一命名,便于识别,例如ip地址
  • 统一配置管理:在一个集群中,要求所有节点的配置信息是一致的
  • 统一集群管理:在一个集群中,需要实时监控每个节点的状态变化
  • 负载均衡:在zookeeper中记录每台服务器的访问数,再次请求的时候,让访问最少的服务器去处理当前请求

2.zk的数据存储,当重启后怎么重构zk的数据模型

zk中的数据是保存在节点上的,节点就是znode,多个znode之间构成一棵树的目录结构

zk的数据是运行在内存中,zk提供了两种持久化机制:

  • 事务日志:zk把执行的命令以日志形式保存在dataLogDir指定的路径中的文件中(如果没有指定dataLogDir,则按照 dataDir指定的路径)。
  • 数据快照:zk会在一定的时间间隔内做一次内存数据快照,把时刻的内存数据保存在快照文件中。

zk通过两种形式的持久化,在恢复时先恢复快照文件中的数据到内存中,再用日志文件中的数据做增量恢复,这样恢复的速度更快

3.zk的选举机制

  • zookeeper刚启动的时候投票过半数时,服务器id大的胜出
  • 我举个例子吧,假设有3台服务器,服务器1先启动,此时只有它一台服务器启动了,没有任何服务器可以进行通信,因此处于Looking状态,紧接着服务器2启动,它就会和1进行通信,交换选举结果,此时id较大的2胜出,并且满足半数以上的服务器同意选举2,所以2就成为了leader,最后服务器3启动,虽然自己的id大一些,但是前面已经选出了leader,因此自己就成为了follower

4.follower和observer的区别

  • follower与老大Leader保持心跳连接,当Leader挂了的时候,经过投票后成为新的leader

5.zk基于什么协议,zab和raft的区别

zookeeper基于zab协议

zab和raft主要有四点区别:

  • 一致性模型:ZAB协议和Raft协议都采用Leader-Follower模型,但ZAB协议只能保证强一致性,而Raft协议可以根据需要保证强一致性或弱一致性。
  • 选主过程:ZAB协议的选主过程中只有当前Leader节点参与,而Raft协议的选主过程中所有节点都参与,更容易实现节点间的负载均衡。
  • 日志复制机制:ZAB协议将每个节点的事务日志存储在Leader节点中,然后通过Leader节点进行复制,而Raft协议将每个节点的日志直接复制到其他节点,降低了中心化的压力。
  • 可扩展性:ZAB协议的可扩展性受限于Leader节点的性能,而Raft协议可以通过水平扩展来增加整个系统的容量和性能。
  • 6.zk怎么扩容,zk机房扩容有什么要注意的吗

    zookeeper集群的数量应为奇数:因为根据paxos理论,只有集群中超过半数的节点还存活才能保证集群的一致性。

    7.cap原则

    • C表示Consitency(一致性,也就是从每个节点读取的数据是一样的),A表示Avaliablity(可用性,也就是整个系统一直处于可用的状态),P表示Partition tolerance(分区容错性,分布式系统在 任何网络分区故障问题的时候,仍然能正常工作),对于一个分布式系统来说的话,最多只能满足其中的两项,并且满足P是必须的,所以往往选择就在CP或者AP中。而zookeeper就是满足了一致性和分区容错性因为leader节点挂掉的时候,集群会重新选举出leader,在这个期间集群是不满足可用性的
    #数据人的面试交流地##大数据开发##大数据开发面经##面试经验#
    全部评论

    相关推荐

    感觉还行,开泡。1.自我介绍2.介绍一下滴滴的实习3.介绍一下最难的工作4.为什么要用activity模仿dialog,基于什么考量的?5.技术层面的考量是什么?6.弹窗时候是前台还是后台?7.遇到空异常  你们用的java不是kotlin吗?8.java怎么避免空异常?9.防御性处理你怎么做?10.也可以加注解,原理是什么?11.kotlin是怎么预防空空异常的?12.看过kotlin的书吗?13.kotlin的空异常检查的是编译还是运行时候检查?14.RN和原生之间互相调用通信?15.bridge里面的原理是什么?16。怎么从js代码调用安卓的代码17.讲一下crash的上报机制18.你做了什么优化的?19.java里面哪几种引用?20.jvm的GC算法有哪些?21.你讲一下hashmap的实现22.线程池有哪几种?固定 单线程 这些23.你知道这些怎么实现的吗?24.线程池构造函数的参数的含义25.add一个任务怎么运作的?26.如果全满了  怎么办呢?27.volite关键字的作用28.让你自己设计一个线程池  你怎么设计  介绍一下29.代码实现30.submit反法你怎么实现  怎么提交进来 放到线程里面自己说了handler相关31.怎么从队列里面取出呢?epoll机制自己说了32.handler实现是吗?33.通过handler哪个线程呢?34.你怎么确认post哪个线程呢?35.中间加一个管理器 去记录状态post时候查询状态36.kotlin的拓展函数是怎么实现的?37.编译时候转化为了静态函数38.安卓适配不同尺寸的手机呢?相对布局  资源大小  dp ds这些39.不同的drawable下的资源  是怎么确认用哪个里面的呢?40.怎么设计一个 相册呢?九宫格样式的41.你有什么爱好
    点赞 评论 收藏
    分享
    评论
    11
    33
    分享

    创作者周榜

    更多
    牛客网
    牛客网在线编程
    牛客网题解
    牛客企业服务