유튜브로 카프카 관련 영상을 봤는데, 주키퍼란 아이가 등장하였다.
주키퍼에 대해 간략히 조사해보았다.
일단, 주키퍼를 알아보기 위해 카프카가 어떻게 구성되어 있는지 알아야 한다.
카프카 구성
카프카는 크게 프로듀서, 카프카(브로커), 컨슈머, 주키퍼로 분류할 수 있다.
- 프로듀서 : 카프카와 통신하면서 메시지를 보내는 역할
- 컨슈머 : 카프카와 통신하면서 메시지를 가져오는 역할
- 주키퍼 : 컨슈머와 통신, 카프카의 메타데이터 정보를 저장, 카프카의 상태관리 등 목적으로 이용
- 카프카
주키퍼?
분산 애플리케이션을 사용하게 되면, 분산 애플리케이션 관리를 위한 안정적인 코디네이션 애플리케이션이 추가로 필요하게 된다.
안정적인 코디네이션 서비스로 검증된 주키퍼를 많이 사용하게 된다.
주키퍼 는 분산 애플리케이션을 위한 코디네이션 시스템이다. 분산 애플리케이션이 안정적인 서비스를 할 수 있도록 분산되어 있는 각 애플리케이션의 정보를 중앙에 집중하고 구성 관리, 그룹 관리 네이밍, 동기화 등의 서비스를 제공한다.
서버 여러 대를 앙상블(클러스터)로 구성하고, 분산 애플리케이션들이 각각 클라이언트가 되어 주키퍼 서버들과 커넥션을 맺은 후 상태 정보 등을 주고 받는다. (위의 그림에서 Server는 주키퍼, Client는 카프카가 된다.)
상태 정보들은 주키퍼의 지노드(znode)라고 불리는 곳에 Key-Value 형태로 저장하며, 지노드에 저장된 것을 이용하여 분산 애플리ㅔ이션들은 서로 데이터를 주고받게 된다. (znode를 일반 컴퓨터의 파일이나 폴더 개념으로 생각하면 쉬움)
지노드(znode)는 우리가 알고 있는 일반적인 디렉토리와 비슷한 형태로서 자식노드를 가지고 있는 계층형 구조로 구성되어 있다.
- 각 지노드는 데이터 변경 등에 대한 유효성 검사 등을 위해 버전 번호를 관리(데이터가 변동될 때마다 지노드의 버전 번호가 증가)
- 주키퍼에 저장되는 데이터는 모두 메모리에 저장되어 처치량이 매우 크고 속도 또한 빠름
주키퍼는 좀 더 신뢰성 있는 서비스를 위해 앙상블(클러스터)이라는 호스트 세트를 구성할 수 있다. 앙상블로 구성되어 있는 주키퍼는 과반수 방식에 따라 살아 있는 노드 수가 과반 수 이상 유지된다면, 지속적인 서비스가 가능하다.
case1. 주키퍼 앙상블 3대 구성
- 노드 1대 다운 : 과반수 유지 되므로 서비스 가능
- 노드 2대 다운 : 과반수가 유지되지 않기 때문에 서비스 불가
case2. 주키퍼 앙상블 5대 구성
- 노드 2대 다운 : 과반수 유지 되므로 서비스 가능
앙상블 구성의 숫자가 많을 수록 과반수 역시 커지므로 꽤 많은 노드 수에서 장애가 발생해도 끊김없는 서비스를 제공할 수 있음
'프로그래밍 노트 > 인프라' 카테고리의 다른 글
[kafka] 카프카 고가용성과 리플리케이션(장애 극복 방법) (0) | 2021.05.04 |
---|---|
[kafka] 카프카 특징 (데이터 모델, 디자인 특징) (0) | 2021.04.30 |
젠킨스 Master/Slave 분산 빌드 환경 도커로 구축하기 (1) | 2021.01.30 |
ScaleOut, ScaleUp (스케일아웃, 스케일업) (0) | 2021.01.24 |
[nginx] Proxy 환경에서 client IP 얻기 (정확한 ip 얻기) (1) | 2020.09.02 |