본문 바로가기
Backend

[kafka] 카프카 관리를 위한 주키퍼

by JINJINC 2025. 4. 1.
728x90
반응형

아파치 산하 프로젝트인 하둡, 나이파이, 에이치베이스, 스톰 등 많은 애플리케이션이 부하 분산 및 확장이 용이한 분산 애플리케이션으로 개발되고 있습니다.
이러한 분산 애플리케이션을 사용하게 되면, 분산 애플리케이션 관리를 위한 안정적인 코디네이션 애플리케이션이 추가로 필요하게 됩니다.

주키퍼(Zookeper)

주키퍼는 본래 하둡의 서브 프로젝트 중 하나였습니다.
대용량 분산 처리 애플리케이션인 하둡은 중앙에서 분산 애플리케이션을 관리하는 코디네이션 애플리케이션이 필요했기 때문에, 서브 프로젝트로서 주키퍼 개발 작업을 진행했었습니다.
후에 , 탑 레벨 프로젝트로 승격되었고, 현재는 아파치 카프카 뿐만 아니라 여러 분산 애플리케이션에서 사용되고 있습니다.

주키퍼란?

분산 애플리케이션을 위한 코디네이션 시스템입니다.
분산 애플리케이션이 안정적인 서비스를 할 수 있도록 분산되어 있는 각 애플리케이션의 정보를 중앙에 집중하고 구성 관리, 그룹 관리 네이빙, 동기화 등의 서비스를 제공합니다.
주키퍼는 서버 여러대를 앙상블(클러스터)로 구성하고, 분산 애플리케이션들이 각각 클라이언트가 되어 주키퍼 서버들과 커넥션을 맺은 후 상태 정보등을 주고 받게 됩니다.
주키퍼의 지노드(znode)라 불리는 곳에 키-값 형태로 저장하고, 지노드에 키-값이 저장된 것을 이용하여 분산 애플리케이션들은 서로 데이터를 주고받게 됩니다.
주키퍼에서 사용되는 지노드는 데이터를 저장하기 위한 공간 이름을 말하는 것으로, 일반 컴퓨터의 파일이나 폴더 개념이라고 생각하면 쉽습니다.

일반적으로 지노드에 저장하는 데이터 크기는 바이트에서 킬로바이트정도로 매우 작으며, 지노드는 우리가 알고 있는 일반적인 디렉토리와 비슷한 형태로서 자식 노드를 가지고 있는 계층형 구조로 구성되어 있습니다.
주키퍼의 각 지노드는 데이터 변경 등에 대한 유효성 검사 등을 위해 버전 버호 관리하게 되며, 지노드의 데이터가 변경될 때마다 지노드의 버전 번호가 증가합니다.
저장용으로 설계된 일반적인 파일 시스템과 달리 주키퍼에 저장되는 데이터는 모두 메모리에 저장되어 처리량이 매우 크고 속도 또한 빠릅니다. 또한 주키퍼는 좀 더 신뢰성 있는 서비스를 위해 앙상블(클러스터)이라는 호스트 세트를 구성할 수 있습니다.
클러스터로 구성되어 있는 주키퍼는 과반수 방식에 따라 사라있는 노드 수가 과반 수 이상 유지된다면, 지속적인 서비스가 가능하게 됩니다.
앙상블 구성의 숫자가 많을 수록 과반수 역시 커지므로 꽤 많은 노드의 수에서 장애가 발생해도 끊임 없이 서비스를 제공할 수 있습니다.

만약 IDC 내 주키퍼를 구성하는 경우 주키퍼 앙상블 서버들을 모두 하나의 랙에 배치하지 않고 각각의 주키퍼 서버를 랙별로 분산한다면 한 곳에서 랙 전원 장애가 발생하더라도 장애 상황을 회피할 수 있고, 스위치 역시 분산해 구성한다면 하나의 스위치 장애가 발생하더라도 마찬가지로 안정적 운영이 가능해집니다.

728x90
반응형

'Backend' 카테고리의 다른 글

[kafka] kafka 디자인 특징  (0) 2025.04.01
[Kafka] 카프카의 동작 방식과 원리  (0) 2025.04.01
[Backend] Kafka 명령어  (0) 2025.03.15

댓글