[Kafka]주키퍼(Zookeeper) 알아보기


이 글은 카프카, 데이터 플랫폼의 최강자 고승범/공용준 님의 책을 공부하며
정리하는 글입니다.

[Kafka]주키퍼(Zookeeper) 알아보기

주키퍼에 대해서 알아보자

복습하기(프로듀서, 카프카, 컨슈머)

  • 프로듀서: 카프카와 통신하면서 메시지를 보내는 역할
  • 컨슈머: 카프카와 통신을 하면서 메시지를 가져오는 역할
  • 아래 그림을 참고하면 점선?
    • 주키퍼에 오프셋을 저장하는 기능(앞으로 사라질 예정)
    • 현재까지는 오프셋 정보를 주키퍼와 카프카 양쪽에 저장할 수 있음
  • 주키퍼: 컨슈머와 통신하는 부분, 카프카와 직접 통신을 하기도 함. 카프카의 메타데이터 정보를 주키퍼에 저장하고, 카프카의 상태관리 등을 목적으로 주키퍼를 이용한다


주키퍼란?

  • 분산 애플리케이션을 위한 코디네이션 시스템
    • 분산되어 있는 각 애플리케이션의 정보를 중앙에 집중하고 구성 관리, 그룹 관리 네이밍, 동기화 등을 제공한다.
    • 주키퍼는 아래 그림과 같이 서버 여러 대를 앙상블(클러스터)로 구성
    • 상태 정보를 지노드(znode)라 불리는 곳에 key-value 형태로 저장한다. 이 지노드에 저장된 key-value를 이용하여 분산 애플리케이션은 서로 데이터를 주고 받는다.
    • 지노드는 일반 컴퓨터의 파일이나 폴더 개념으로 생각하자


지노드 알아보기

  • 자식노드를 가진 계층형 구조다
  • 지노드 데이터가 변경될때 마다 지노드의 버전 번호는 증가한다.
  • 저장되는 일반적인 파일 시스템은 디스크에 쓰지만, 주키퍼에 저장되는 데이터는 메모리에 저장되므로 처리량이 매우 크고 속도가 빠르다.
  • / 는 최상단 root이며 아래로 디렉토리형태로 주소가 붙는다.(아래그림 참조)


주키퍼 성능은?

  • 일반적으로 주키퍼 서버 3대로 앙상블을 구성한 경우 최대 초당 약 80,000개 처리
  • 5대 이상의 앙상블인 경우는 최대 초당 140,000개를 처리할 수 있다.
  • 앙상블의 구성 숫자가 많을 수록 많은 노드에서 장애를 일으켜도 끊김없는 서비스가 가능하다.


오프셋?
오프셋이란, 두 번째 주소를 만들기 위해 기준이 되는 주소에 더해진 값을 의미한다. 예를 들어, 만약 아래의 수식에서 C가 100번지의 주소를 가리키고 있다면, 그 수식의 결과는 107번지를 의미할 것이다.
(C + 7)에서 “7”이, 바로 오프셋이다. 오프셋을 이용하여 주소를 나타내는 것을 상대주소 지정방식이라고 부르는데, 그 이유는 결과 주소가 다른 지점의 상대적인 위치가 되기 때문이다. 오프셋을 다른 말로 “변위”라고도 부른다.