Zookeeper
- Apache Zookeeper 는 분산 시스템을 위한 중앙 코디네이터
Kafka 는 분산 시스템이기 때문에
- 노드(=Broker) 간의 메타 데이터 관리
- 리더 선출
- 상태 동기화
같은 작업이 필요한데, 이런 부분을 Kafka 혼자하기에 어려움이 있다.
그래서 Zookeeper 에 위임하는 구조
Zookeeper 를 쓰는 이유
브로커 등록
- Kafka 브로커들이 Zooker 에 자신을 등록해서 누가 살아있는지 알게 한다.
컨트롤러 선출
- 여러 브로커 중에서 리더(컨트롤러)를 선출한다.
토픽/파티션 메타데이터 관리
- 토픽 생성, 파티션 정보, 리더 정보 등을 저장한다.
상태 감시
- 브로커나 컨슈머가 죽었는지 감시 (Watcher 가능)
최근 변화
Kafka Without Zookeeper
이제는 Kafka 가 Zookeeper 가 없어도 동작이 가능하다!
- 이걸 KRaft 모드 (Kafka Raft Metadata mode) 라고 부름
- Kafka 가 자체적으로 메타데이터 관리, 컨트롤러 선출 등을 하도록 변경
- 결과적으로 Zookeeper 의존성 제거
Zookeeper 구조

설명
Client
- Kafka 같은 앱들이 Zookeeper 에 연결해서 읽기/쓰기
Ensemble
- Zookeeper 서버들의 집합 (보통 3대 이상으로 구성)
Leader
- 쓰기 요청 처리, Follower 와 데이터 동기화
Follower
Data Tree
- Zookeeper 내부 데이터는 znode 라는 구조로 트리 형태로 저장 (파일 시스템처럼)