1.如何解决zookeeper磁盘IO高的问题
==可以把事务日志输出到内存空间,配置dataLogDir:/dev/shm/    内存空间目录
==ZK提供了自动清理事务日志和快照文件的功能关闭autopurge.purgeInterval =0
==可以配置snapCount:默认是100000,调大一点就可以减少触发快照snapshot,
==就会少生成一定的snapshot.*文件,事务日志文件log.*,减少磁盘IO
    
2.部署zookeeper时,如何解决脑裂问题
极小概率事件:如果当leader挂掉后重启,会认为自己还是leader。
解决办法:通过EpochId来解决,只接受最大的EpochId的leader的事务。
因为:本身依赖与zab协议,避免脑裂 事务Id高32位EpochId当leader变更后会递增。
基于:fast paxos算法选举

3.如何正确处理CONNECTIONLOSS和 SESSIONEXPIRED(Session 过期)两类连接异常
连接断开:客户端会主动在地址列表(初始化时候传入构造方法参数connectString)中选择新的地址进行连接,
自动连接新的zk机器,连接后会确定之前操作是否执行成功。
 session过期:客户端服务器断开重连过程中session超时,服务器开始清除会话信息,
 包括临时节点和注册的watcher,这时重连成功造成session过期,需要重新实例zk对象,重新操作临时数据
 正确处理connectionloss的方法
java方案:可以通过锁的方法,这里应用递减锁CountDownLatch指定计数次数为“1”
当连接报ConnectionLoss 时,线程阻塞await(); 
当连接成功countDown()递减”1“为“0”正常访问

4.ZK为什么不提供一个永久性的Watcher注册机制
因为有很多更新频繁的节点,服务端会不断地向客户端发送事件通知,
这样对网络还是服务器性能的影响都非常大,所zk无法保证性能。
5.除了大数据架构外,ZK还在哪些场景中有应用?

   5.1数据发布/订阅

   5.2负载均衡

   5.3命名服务

   5.4分布式协调/通知

   5.5集群管理

   5.6Master选举

   5.7分布式锁

   5.8分布式队列

   

 

更多推荐