공부한것들을 정리하는 블로그 입니다.
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를 배포하고 싶다면 주키퍼 또한 관리하고 운영해야 했다.
- 두 가지 분산 시스템은 서로 다른 설정을 요구하며 복잡성 또한 자연스럽게 증가했다.
- 이러한 부분에서의 편의성 개선을 위해, 이제는 카프카 내부에 메타데이터를 저장하고 관리한다.
'경력 실무경험 > 생각해볼만한 주제' 카테고리의 다른 글
| 트레이드 오프(Trade-off) (0) | 2025.09.29 |
|---|---|
| 최종적 일관성(Eventual Consistency) (0) | 2025.09.29 |
| CQRS(Command Query Responsibility Segregation) 패턴 (0) | 2025.09.04 |
| 결제 시스템의 분석과 설계, 그리고 멱등성 (3) | 2025.08.31 |
| 알림 시스템의 분석과 설계, 그리고 분산 시스템 (7) | 2025.08.25 |
| 트위터 시스템 디자인 생각해보기 (1) | 2023.05.10 |
| 결제 도메인의 네트워크 예외처리(망취소) (0) | 2023.04.30 |
| 대용량 트래픽 처리 방법 짧게 정리 (0) | 2023.04.28 |
