작성
·
282
답변 1
1
안녕하십니까,
많이 배우고 계시다니 저도 뿌듯하군요.
브로커 서버와 주키퍼간에 통신이 특정 컴포넌트를 기반으로 한다기 보다는,
주키퍼는 디렉토리 트리 기반의 node를 여러개의 모든 브로커들이 모니터링하고 있다가 변경사항이 발생하면 이를 통보받아서 처리하는 로직으로 되어 있습니다.
가령 컨트롤러 브로커를 정할 때 최초 컨트롤러 브로커는 zookeeper의 /controller 노드에 지정되게 됩니다. 그리고 다른 브로커들도 주키퍼에 /controller 노드를 생성하려고 하지만 이미 해당 노드가 생성되었다는 오류 메시지를 받게 됩니다.
이후에 다른 브로커들은 Zookeeper watch를 통해서 이 노드를 모니터링하게 되고, 해당 노드에 변경사항이 발생하면 주키퍼로 부터 변경사항을 통보받고 /controller 노드에 등록하고 컨트롤러 브로커가 되려는 시도를 합니다.
예를 들어 기존 컨트롤러 브로커가 특정 시간동안 응답이 없으면 주키퍼는 /controller 노드를 삭제하고 변경 사항은 Zookeeper watch를 통해 다른 브로커에 전송됩니다. 그리고 주키퍼에 첫번째 controller 노드를 생성하는 브로커가 컨트롤러 브로커가 됩니다.
브로커와 주키퍼는 이런 메커니즘으로 동작하는데, 이걸 어떤 특정 컴포넌트가 전담해서 하는지는 저도 잘 모르겠습니다(문서에도 나오지 않습니다)
감사합니다.
감사합니다!!!!