最近遇到ZooKeeper读写性能抖动比较厉害。从ZooKeeper的日志中分析,有大量报“fsync-ing the write ahead log in XXX took xx ms which will adversely effect operation latency.”。也就是说,写硬盘的速度太慢了。由于ZooKeeper默认情况是需要确保数据下盘的,所以相当于调用了sync,猜测这是一个比较费时的操作。如果ZooKeeper的数据目录所在的硬盘和其它服务共用的话,可能会互相干扰。
那么ZooKeeper的写性能会影响读吗?很遗憾,会的。当ZooKeeper遇到写操作时,会将后续的操作都挂起,等到该写操作完成后,才会继续执行后面的任意操作。
所以说,尽量把ZooKeeper所使用的硬盘和其它的服务分开。