관리 메뉴

공부한것들을 정리하는 블로그 입니다.

Kafka와 ZooKeeper ( 분산 메시징 시스템 :Kafka / 분산 시스템 코디네이터 : ZooKeeper ) 본문

경력 실무경험/생각해볼만한 주제

Kafka와 ZooKeeper ( 분산 메시징 시스템 :Kafka / 분산 시스템 코디네이터 : ZooKeeper )

호 두 2025. 8. 25. 17:04
반응형

 

Kafka와 ZooKeeper ( 분산 메시징 시스템 :Kafka / 분산 시스템 코디네이터 : ZooKeeper )

 - 보통 kafka를 docker로 구성해서 사용하다 보면 zookeeper도 같이 구성해서 사용함
 - 요즘은 Kafka에서 Zookeeper를 사용 할 필요가 없음

 


1. ZooKeeper의 사용 목적

분산 시스템은 서버 간의 정보 공유, 서버 상태 체크, 데이터 락 등의 기능이 필수적으로 필요하다.
- (알림 시스템의 분석과 설계, 그리고 분산 시스템 : https://drsggg.tistory.com/829 )

이때 Zookeeper는 분산된 시스템끼리 정보를 공유하기 위해 사용되는 분산 코디네이션 서비스이다.


2. ZooKeeper의 동작 원리

1) ZooKeeper의 서버 클러스터에서 다수의 서버 중 리더로 선출되는 서버가 존재한다.
- 리더로 선출된 서버의 Request Processor는 다른 Follower 서버들이 받는 Client의 write 요청까지 처리하게 된다.

2) Zab(Zookeeper Atomic Broadcast)는 Request Processor에서 처리된 작업을 모든 Follower 서버에도 전파한다.

3) 각 클라이언트의 상태 정보들은 Zookeeper의 다수의 서버에서 znode라는 in-memory Key-Value 형태로 저장한다.
- 클라이언트에는 znode의 변화를 감지하는 watcher를 설정하여 변경 내용을 전달 받을 수 있다.


3. Kafka와의 동작 원리

 
Producer: 메시지 생산
Consumer: 메시지 소비
Broker: 메시지 전달 및 저장
- Disk : 메타데이터 저장소 => kafka : 각 브로커/컨트롤 브로커들 간의 변경 사항을 확인 가능하다. 

각각의 Producer와 Consumer는 카프카 외부에서 동작하는 서비스들이므로,
카프카 Broker가 카프카 시스템의 핵심이다.
- 브로커 : 카프카 클러스터에서는 Broker가 여러 개 존재한다.
- 여러 개의 Broker 중 하나가 컨트롤러의 역할을 수행한다.
- 컨트롤러 브로커 : 컨트롤러 Broker는 각 브로커에게 담당 파트션을 할당하고 다른 브로커들의 정상 동작을 모니터링 기능을 맡는다.
- 이때 컨트롤러 Broker가 ZooKeeper의 watch 기능을 통해서 다른 브로커를 모니터링한다.
- 이외의 브로커들도 watch 기능으로 컨트롤 노드의 변경 사항을 확인 가능하다.


4. Kafka는 왜 Zookeeper 쓰는가?


zookeeper는 일종의 카프카의 메타데이터 저장소로서 기능한다.
 
Producer: 메시지 생산
Consumer: 메시지 소비
Broker: 메시지 전달 및 저장
- Disk : 메타데이터 저장소 => kafka : 각 브로커/컨트롤 브로커들 간의 변경 사항을 확인 가능하다. 


5. Kafka는 왜 직접 코디네이터 시스템을 구현하지 않고 zookeeper에게 의존하는가?


현재는 Zookeeper를 굳이 사용 할 필요가 없다. Kafka에서 메타데이터 저장소를 지원한다.


 

#참고 : 현재 Kafka에서 Zookeeper를 사용 할 필요가 없는 이유


Zookeeper는 Kafka에서 metadata store로서 기능하며 
- 파티션의 위치, 토픽의 설정 정보 같은 데이터가 주키퍼 클러스터에 따로 저장되었다.

따라서, 만약 사용자가 Kafka cluster를 배포하고 싶다면 주키퍼 또한 관리하고 운영해야 했다.
- 두 가지 분산 시스템은 서로 다른 설정을 요구하며 복잡성 또한 자연스럽게 증가했다.
- 이러한 부분에서의 편의성 개선을 위해, 이제는 카프카 내부에 메타데이터를 저장하고 관리한다.



반응형
Comments