본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/Hello기술

[Kafka] 카프카 - 주키퍼(ZooKeeper)란?

by 미노드 2023. 8. 3.

분산 코디네이션 서비스를 제공하는 오픈소스
@분산 코디네이션 서비스 (분산 시스템에서 시스템 간의 정보 공유, 상태 체크, 서버들 간의 동기화를 위한 락 등을 처리해주는 서비스)

 

주키퍼를 알기전에 카프카에 대해 간략하게 이해하기

카프카는 크게 프로듀서, 카프카(브로커), 컨슈머, 주키퍼로 분류할 수 있다.

  • 프로듀서 : 카프카와 통신하면서 메시지를 보내는 역할
  • 컨슈머 : 카프카와 통신하면서 메시지를 가져오는 역할
  • 주키퍼 : 컨슈머와 통신, 카프카의 메타데이터 정보를 저장, 카프카의 상태관리 등 목적으로 이용
  • 카프카 클러스터 : 카프카 본체로 여러 브로커가 모인 것.(브로커는 실행그룹 단위이며, 내부에 여러 작업을 수행하는 인터페이스들이 모여있다.)

Topic  Broker에서 데이터의 발행/소비 처리를 위한 저장소
producer와 consumer가 소통을 하는 채널
Kafka Broker  카프카의 서비스 인스턴스로서, 다수의 Broker 클러스터로 구성하고 Topic 생성되는 물리적 서버
Kafka Producer  Broker의 특정 Topic 데이터를 전송(발행)하는 역할로서 애플리케이션에서 카프카 라이브러리를 이용해 구현
메세지를 보내는 역활
Kafka Consumer  Broker의 특정 Topic에서 데이터를 수신(소비)하는 역할로서 애플리케이션에서 카프카 라이브러리를 이용해 구현
메세지를 받는 역활
Kafka Partition 실제 디스크에 어떻게 저장이 되는지 가르는 기준
producer로 부터 데이터가 오면 topic 내 partition에 저장
Kafka Message • 카프카의 메시지는 Byte의 배열
• 흔히 단순 String, JSON이나 Avro 사용
• 카프카 메시지의 크기에는 제한이 없다

◦ 하지만 성능을 위해 작게 유지하는것을 추천
◦ 데이터는 사용자가 지정한 시간만큼 저장한다 (Retention Period)
◦ Topic별로 지정도 가능
◦ Consumer가 데이터를 받아가고 나서도 데이터는 저장된다

• Retention Period가 지나면 데이터는 자동으로 삭제
Kafka Offset  보내진 메세지는 offset을 가짐
메세지 정렬 순서
Kafka Consumer Group Kafka Consumer Group 
Consumer들은 그룹을 이룰 수 있음
Kafka Cluster 고가용성이나 확장성을 이루기 위해서 kafka는 broker가 여러 개로 나뉘어서 하나의 토픽을 서빙
하나의 토픽이 여러 개의 브로커
하나의 브로커에 여러 개의 토픽
Zookeeper kafka cluster의 여러 요소들을 설정하는데 사용

주키퍼(Zookeeper)?

분산 애플리케이션을 사용하게 되면
분산 애플리케이션 관리를 위한 안정적인 코디네이션 애플리케이션이 추가로 필요하게 된다.
안정적인 코디네이션 서비스로 검증된 주키퍼를 많이 사용하게 된다.

@분산 코디네이션 서비스 (분산 시스템에서 시스템 간의 정보 공유, 상태 체크, 서버들 간의 동기화를 위한 락 등을 처리해주는 서비스)

주키퍼(Zookeeper)는 분산 애플리케이션을 위한 코디네이션 시스템이다.
분산 애플리케이션이 안정적인 서비스를 할 수 있도록
분산되어 있는 각 애플리케이션의 정보를 중앙에 집중하고 구성 관리, 그룹 관리 네이밍, 동기화 등의 서비스를 제공한다.

서버 여러 대를 앙상블(클러스터)로 구성하고, 분산 애플리케이션들이 각각 클라이언트가 되어 주키퍼 서버들과 커넥션을 맺은 후 상태 정보 등을 주고 받는다. (위의 그림에서 Server는 주키퍼, Client는 카프카가 된다.)

상태 정보들은 주키퍼의 지노드(znode)라고 불리는 곳에 Key-Value 형태로 저장하며,
지노드에 저장된 것을 이용하여 분산 애플리케이션들은 서로 데이터를 주고받게 된다.
(znode를 일반 컴퓨터의 파일이나 폴더 개념으로 생각하면 쉬움)

지노드(znode)는 우리가 알고 있는 일반적인 디렉토리와 비슷한 형태로서 자식노드를 가지고 있는 계층형 구조로 구성되어 있다.

주키퍼 내에 저장되는 방식

  • 각 지노드는 데이터 변경 등에 대한 유효성 검사 등을 위해 버전 번호를 관리(데이터가 변동될 때마다 지노드의 버전 번호가 증가)
  • 주키퍼에 저장되는 데이터는 모두 메모리에 저장되어 처치량이 매우 크고 속도 또한 빠름

정리하자면 카프카와 연계 가능한 효율좋은 데이터 스토리지 역할로 볼 수 있겠다.

'IT기술 > Hello기술' 카테고리의 다른 글

REST API 규칙, API란 무엇인가요?  (0) 2024.02.09
[apache] camel 웹 교제  (0) 2023.07.13
Tailwind CSS 사용기  (0) 2023.07.13
[Python] 문자열에서 줄바꿈, 공백 제거  (0) 2023.06.19
[C] \n 과 \r 의 차이  (0) 2018.10.06