2014-07-10 2 views
1

나는 ZooKeeper를 사용하는 응용 프로그램을 작성 중이며 자주 발생하는 이벤트는 CONNECTIONLOSS입니다. 2000을 내 틱 시간으로 사용하고 있습니다. 12000을 세션 시간 초과로 설정하고 응용 프로그램을 Amazon EC2에서 실행하고 있습니다. 나는 그것을 사용하기 전에 ZooKeeper가 연결되기를 기다리고 있다고 믿습니다.빈번한 ZooKeeper CONNECTIONLOSS 이벤트가 있습니까?

ZooKeeper zk=new ZooKeeper(connectionString, sessionTimeout, new Watcher() { 
    @SuppressWarnings("deprecation") 
    public void process(WatchedEvent event) { 
     switch(event.getState()) { 
     case SyncConnected: 
     case ConnectedReadOnly: 
      // We're connected, count down... 
      ready.countDown(); 
      break; 
     case SaslAuthenticated: 
      // Life is good here. Nothing to do... 
      break; 
     case AuthFailed: 
     case Disconnected: 
     case Expired: 
     case NoSyncConnected: 
     case Unknown: 
     default: 
      LOGGER.error("ZooKeeper event: "+event.getState()); 
      break; 
     } 
    } 
}); 

boolean ok; 
try { 
    ok = ready.await(15, TimeUnit.SECONDS); 
} 
catch(InterruptedException e) { 
    throw new InterruptedIOException(); 
} 
if(ok == false) 
    throw new IOException("Failed to connect to ZooKeeper"); 

왜 사육사 이러한 가짜 CONNECTIONLOSS 이벤트를 받고 수 있습니다 : 여기에 내가 그렇게하기 위해 사용하고 코드인가?

+0

여전히 20000 또는 40000 시간 초과가 발생합니까? –

+0

문제를 결정했습니다. 나는 큰 요청을하고 있었고 제대로 작동하려면'jute.maxbuffer'를 업데이트해야했습니다. 제안 해 주셔서 감사합니다! – sigpwned

답변

1

AWS에서 실행될 때도 비슷한 ZK 문제가있었습니다. 우리는 모든 EC2 인스턴스가 NTP (Network Time Protocol)로 실행되는지 확인함으로써 문제를 해결했습니다. 인스턴스에 시간 왜곡이 있으면 시간 초과에 대해 혼란을 느끼는 것으로 보입니다.

+0

좋은 조언입니다. 고맙습니다! – sigpwned