Programming/Kafka

[kafka] 카프카 주키퍼

bisi 2020. 4. 12. 23:00

1. 주키퍼 (Zookeeper)

 

주키퍼란?

  • 주키퍼는 분산 애플리케이션을 위한 코디네이션 시스템
  • 분산 애플리케이션이 안정적인 서비스를 할 수 있도록 분산되어 각 애플리케이션의 정보를 중앙에 집중하고 구성관리, 그룹 관리 네이밍, 동기화 등의 서비스를 제공.
  • 프로그램하기 쉽고 파일 시스템의 친숙한 디렉토리 트리 구조에 따라 스타일이 지정된 데이터 모델을 사용하도록 설계
  • 주키퍼 구현은 고성능, 고 가용성을 보장
  • 서비스를 구성하는 모든 서버는 서로를 모두 알고 있어야 하며, 영구 저장소의 트랜잭션 로그 및 스냅 샵과 함께 메모리 내 상태 이미지를 유지 관리.

 

http://zookeeper.apache.org/doc/current/zookeeperOver.html

 

지노드(znode)

  • 서로 연결되어 있는 서버들은 상태 정보등을 주고 받음. 상태 정보들은 주키퍼의 지노드(znode)라 불리는 곳에 키-값(key-value)형태로 저장하고, 지노드에 키-값이 저장된 것을 이용하여 분산 애플리케이션들은 서로 데이터를 주고 받게 됨.
  • 주키퍼에서 사용되는 지노드는 데이터를 저장하기 위한 공간의 이름. 일반 컴퓨터의 파일이나 폴더개념과 비슷.
  • 이러한 지노드는 계층형 구조로 구성되어 있고, 아래와 같이 최상위 경로는 /이고 그 하위 경로로 /app1 /app2를 가지고 있음.
  • 주키퍼에 저장되는 데이터는 모두 메모리에 저장되어 처리량이 매우 크고 속도 또한 빠르다. 

 

주키퍼 앙상블

  • 주키퍼의 신뢰성 있는 서비스를 위해 앙상블(클러스트)이라는 호스트 세트를 구성
  • 앙상블로 구성되어 있어 주키퍼는 과반수 방식에 따라 살아 있는 노드 수가 과반수 이상 유지된다면 지속적인 서비스가 가능.
  • 예를 들어 주키퍼 앙상블을 3대로 구성한다면, 1대 정도의 주키퍼 서버 장애에도 안정적으로 서비스를 제공. 이렇듯 주키퍼 앙상블은  과반수 방식으로 운영되어 홀수로 구성하는 것을 권장.

 

 

2. 주키퍼와 카프카

 

분산 어플리케이션

  • 주키퍼는 본래 하둡(Hadoop)의 서브 프로그램 중 하나였음. 대용량 분산 처리 애플리케이션인 하둡은 중앙에서 분산 애플리케이션을 관리하는 코디네이션 애플리케이션이 필요했기에 서브 프로젝트로서 주키퍼 개발 작업을 진행하고 있었음.
  • 2011년 1월에 이르러 주키퍼는 드디어 하둡의 서브 프로젝트에서 벗어나 아파치의 탑 레벨 프로젝트로 승격되었고, 현재는 아파치 카프카뿐만 아니라 스톰, 에이치 베이스, 나이파이 프로젝트 등 많은 애플리케이션에서 사용되고 있음. 
  • 카프카는 분산 애플리케이션의 한 종류로서 주키퍼를 코디네이션 로직으로 이용

 

주키퍼와 카프카 서버 운영

  • 분산 어플리케이션이라느 면에서 보면 주키퍼와 동일하지만, 클러스터가 운영되는 방식은 다름. 과반수 방식으로 운영되어 홀수로 서버를 구성해야하는 주키퍼와는 다르게 , 카프카 플러스터는 홀수 운영 구성을 하지 않아도 됨.
  • 주의해야할점은 소규모 프로젝트에서는 카프카와 주키퍼를 동일한 서버 3대에 같이 올려서 운영할 수도 있지만, 대규모로 카프카를 운영하는 환경에서는 추천하지 않음. 왜냐하면 카프카는 클러스터를 3대로 구성했을 때 2대가 다운되어도 서비스를 할 수 있는 반면, 주키퍼는 앙상블을 3대로 구성했을 때 2대가 다운되면 과반수에 미치지 못하기 때문에 장애가 발생. 이와 같은 장애 상황으로 인해 카프카가 정상적이라고 하더라도, 주키퍼가 카프카와 통신을 못한다면 카프카 역시 장애 상황에 놓이게 된다. 따라서 주키퍼와 카프카는 다른 서버에 두기를 권장.

 

 

참고 사이트 ; http://zookeeper.apache.org/

참고 문헌 : 카프카, 데이터 플랫폼의 최강자 실시간 비동기 스트리밍 솔루션 Kafka의 기본부터 확장 응용까지

'Programming > Kafka' 카테고리의 다른 글

[kafka] 카프카 디자인  (0) 2020.04.13
[kafka] 기본 용어 정리  (0) 2020.04.11
[kafka] 카프카 특징  (0) 2020.04.10