字节跳动大数据开发面经答案汇总之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主要有四点区别:
6.zk怎么扩容,zk机房扩容有什么要注意的吗
zookeeper集群的数量应为奇数:因为根据paxos理论,只有集群中超过半数的节点还存活才能保证集群的一致性。
7.cap原则
- C表示Consitency(一致性,也就是从每个节点读取的数据是一样的),A表示Avaliablity(可用性,也就是整个系统一直处于可用的状态),P表示Partition tolerance(分区容错性,分布式系统在 任何网络分区故障问题的时候,仍然能正常工作),对于一个分布式系统来说的话,最多只能满足其中的两项,并且满足P是必须的,所以往往选择就在CP或者AP中。而zookeeper就是满足了一致性和分区容错性。因为leader节点挂掉的时候,集群会重新选举出leader,在这个期间集群是不满足可用性的