zookeeper第一次连接超慢问题

  1. java 连接zookeeper 测试代码

    	String zookeeperAddress = "192.168.100.66:2181";
    	
    	ZooKeeper zooKeeper = null;
    	
    	@Before
    	public void before() throws IOException {
    		ZooKeeper zooKeeper = new ZooKeeper(zookeeperAddress, 60*1000, new Watcher() {
    
    			@Override
    			public void process(WatchedEvent event) {
    				System.out.println("连接");
    			}
    		});
    		
    		this.zooKeeper = zooKeeper;
    		
    		System.out.println( "连接状态状态:" + zooKeeper.getState() );
    	}
    	
    	
    	/**
    	 * 原生客户端
    	 *
    	 * @author ZHANGYUKUN
    	 * @throws IOException 
    	 * @throws InterruptedException 
    	 * @throws KeeperException 
    	 * @Date 2022年6月1日
    	 *
    	 */
    	@Test
    	public void create() throws KeeperException, InterruptedException {
    		//zooKeeper.create("/test/te/a","value".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
    
    		Stopwatch stopwatch = Stopwatch.createUnstarted();
    		stopwatch.start();
    		zooKeeper.create("/test/te/t5","value".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
    		stopwatch.stop();
    		System.out.println( stopwatch.elapsed( TimeUnit.MILLISECONDS ) );
    
    
    		stopwatch.reset();
    		stopwatch.start();
    		zooKeeper.create("/test/te/t6","value".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
    		stopwatch.stop();
    		System.out.println( stopwatch.elapsed( TimeUnit.MILLISECONDS ) );
    
    	}
    
  2. 连接慢的效果,下面第一次连接用了9秒
    据说zk客户端默认优先通过域名方式去dns查找服务器IP,饶了一圈找不到回来然后才使用IP方式去连接。9秒是尽量查询各级DNS的时间。
    image-20230306162731765

  3. 在客户端主机上修改hosts文件

    修改了 hosts 可以认为是在当前主机最近的一层DNS上做了映射,直接就能找到,并且zookeeper解析方式是双向,不管匹配到是IP还是域名列都直接开始执行。

    hosts文件,不管是window linux 还是 mac 都有这个文件
    image-20230306163021203

  4. 改了以后不管用ip还是 主机名连接都是飞快
    image-20230306163124294

posted on 2023-03-07 23:23  zhangyukun  阅读(431)  评论(0编辑  收藏  举报

导航