주키퍼 는 분산 애플리케이션을 위한 코디네이션 시스템이다. 분산 애플리케이션이 안정적인 서비스를 할 수 있도록 분산 되어 있는 각 애플리케이션의 정보를 중앙에 집중하고 구성 관리, 그룹 관리 네이밍, 동기화 등의 서비스를 제공한다.
분산 애플리케이션 관리를 위해서는 안정적인 코디네이션 애플리케이션이 추가로 필요하다. 카포카을 사용하기 위해서 주키퍼(Zookeeper)가 필수적으로 요구된다.
Zookeeper의 특징
서버 여러 대를 앙상블(클러스터)로 구성하고, 분산 애플리케이션들이 각각 클라이언트가 되어 주키퍼 서버들과 커넥션을 맺은 후 상태 정보 등을 주고 받는다.
상태 정보들은 주키퍼의 지노드(znode)라고 불리는 공간에 Key-Value 형태로 저장하며, 지노드에 저장된 것을 이용하여 분산 애플리케이션들은 서로 데이터를 주고받게 된다. 지노드(znode)는 우리가 알고 있는 일반적인 디렉토리와 비슷한 형태로서 자식노드를 가지고 있는 계층형 구조로 구성되어 있다.
각 지노드는 데이터 변경 등에 대한 유효성 검사 등을 위해 버전 번호를 관리(데이터가 변동될 때마다 지노드의 버전 번호가 증가)
주키퍼에 저장되는 데이터는 모두 메모리에 저장되어 처리량이 매우 크고 속도 또한 빠르다.
주키퍼는 좀 더 신뢰성 있는 서비스를 위해 앙상블(클러스터)이라는 호스트 세트를 구성할 수 있다. 앙상블로 구성되어 있는 주키퍼는 과반수 방식에 따라 살아 있는 노드 수가 과반 수 이상 유지된다면, 지속적인 서비스가 가능하다.
Kafka란?
Apache KafKa(아파치 카프카)는 대용량의 이벤트 데이터를 처리하기 위해 링크드인(LinkedIn)에서 개발한 분산 스트리밍 플랫폼이다. 발행-구독 메시지를 분산 커밋 로그로 재해석한 시스템.
대용량의 실시간 로그처리에 특화되어 있는 솔루션으로 데이터를 유실없이 안전하게 전달하는 것이 주목적인 메세지 시스템에서 Fault-Tolerant한 안정적인 아키텍처와 빠른 퍼포먼스로 데이터를 처리해준다.
다수의 기업이 대용량 데이터의 저장 및 처리를 위한 전송 계층으로 Kafka를 사용한다. 소개된 수많은 개발 프로젝트에서 Kafka는 데이터 스테이징과 관련하여 중요한 역할을 수행해왔다.
Kafka의 특징
카프카는 파티션이란 개념을 도입하여 여러 개의 파티션을 서버들에 분산시켜 나누어 처리할 수 있다. Producer가 메시지를 어떤 파티션으로 전송할지는 사용자가 구현한 분배 알고리즘에 따른다.
각 파티션에 균등하게 저장하거나, 메시지의 키를 활용하여 특정 문자로 시작하는 메시지는 특정 파티션에 할당할 수 있다. => 파티션을 나누었을 때, 메시지의 순서는 보장해주지 않는다. 한번 늘린 파티션은 절대로 줄일 수 없다.
카프카는 클러스터로 동작하여 고가용성 서비스를 제공할 수 있고, 서버를 수평적으로 늘려 안정성 및 성능을 향상 시킬 수 있다.
각 파티션을 복제하여 클러스터에 분산 시킬 수 있다.
각 파티션은 Leader 와 Follower로 구분 존재하며, Leader에서만 읽기(read)와 쓰기(write)가 일어난다.
구조 및 각 역할
Zookeeper란?
주키퍼 는 분산 애플리케이션을 위한 코디네이션 시스템이다. 분산 애플리케이션이 안정적인 서비스를 할 수 있도록 분산 되어 있는 각 애플리케이션의 정보를 중앙에 집중하고 구성 관리, 그룹 관리 네이밍, 동기화 등의 서비스를 제공한다.
분산 애플리케이션 관리를 위해서는 안정적인 코디네이션 애플리케이션이 추가로 필요하다. 카포카을 사용하기 위해서 주키퍼(Zookeeper)가 필수적으로 요구된다.
Zookeeper의 특징
서버 여러 대를 앙상블(클러스터)로 구성하고, 분산 애플리케이션들이 각각 클라이언트가 되어 주키퍼 서버들과 커넥션을 맺은 후 상태 정보 등을 주고 받는다.
상태 정보들은 주키퍼의 지노드(znode)라고 불리는 공간에 Key-Value 형태로 저장하며, 지노드에 저장된 것을 이용하여 분산 애플리케이션들은 서로 데이터를 주고받게 된다. 지노드(znode)는 우리가 알고 있는 일반적인 디렉토리와 비슷한 형태로서 자식노드를 가지고 있는 계층형 구조로 구성되어 있다.
주키퍼에 저장되는 데이터는 모두 메모리에 저장되어 처리량이 매우 크고 속도 또한 빠르다.
주키퍼는 좀 더 신뢰성 있는 서비스를 위해 앙상블(클러스터)이라는 호스트 세트를 구성할 수 있다. 앙상블로 구성되어 있는 주키퍼는 과반수 방식에 따라 살아 있는 노드 수가 과반 수 이상 유지된다면, 지속적인 서비스가 가능하다.