字节跳动大数据开发面经答案汇总之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,在这个期间集群是不满足可用性的
    #数据人的面试交流地##大数据开发##大数据开发面经##面试经验#
    全部评论

    相关推荐

    不愿透露姓名的神秘牛友
    今天 10:49
    腾讯 前端工程师 28k 本科985
    点赞 评论 收藏
    分享
    10 30 评论
    分享
    牛客网
    牛客企业服务