Zookeeper
분산 코디네이션 서비스를 제공하는 오픈소스 프로젝트로 직접 어플리케이션 작업을 조율하는 것을 쉽게 개발할 수 있도록 도와주는 도구이다. API를 이용해 동기화나 마스터 선출 등의 작업을 쉽게 구현할 수 있게 해준다.
주키퍼는 분산 어플리케이션을 위한 코디네이션 시스템으로,
분산되어 있는 각 어플리케이션의 정보를 중앙에 집중하고 구성,관리,그룹 관리 네이밍,동기화 등의 서비스를 제공한다.
- 설정관리
클러스터의 설정 정보를 최신으로 유지하기 위한 시스템 - 클러스터 관리
클러스터의 서버가 추가되거나 제외될 때 그 정보를 클러스터 내 서버(브로커)들이 공유하기 위한 시스템 - 리더 채택
다중 어플리케이션 중 어떤 노드를 리더로 산출할 지 정하는 로직을 만드는 시스템 - 락,동기화
클러스터에서 쓰기 연산이 빈번할 경우 클러스터 전체를 동기화를 통해 데이터 불일치 방지하는 시스템
주키퍼는 안정성을 확보하기 위해 다수의 서버를 사용하는 서버클러스터 구조를 이용한다.
서버 클러스터는 1개의 리더와 N개의 팔로워로 구성되어 있고, 이를 주키퍼 앙상블(Zookeeper Ensemble) 이라고도 한다.
일관성을 어떻게 유지 하는가 ?
Client(Kafka)가 어떤 설정값 혹은 메타데이터를 주키퍼에 쓸 때 어떻게 동작 할까 ?
- 특정 서버에 접속하여 서버 데이터 업데이트
- 해당서버는 리더서버에 데이터가 업데이트 되었음을 전송
- 리더서버는 업데이트 신호를 받고, 다른 팔로워 서버들에게 브로드캐스트 형식으로 전송
- 나머지 팔로워 서버들도 데이터 업데이트
위 4가지 과정을 통해 주키퍼는 데이터를 항상 일관성 있게 유지하도록 한다.
가운데에 있는 2번 서버는 리더의 역할, 양쪽의 1,3은 팔로워 역할한다. 리더에서 데이터를 가져와서 동기화 하는 방식이다.
주키퍼는 분산형 configuration 정보들을 리더가 가지고 있고 팔로워들이 그 정보들을 복제해서 가지고 있는 형태이다.
아래와 같이 주키퍼가 3대 이상으로 이루어져 있는 형태를 주키퍼 앙상블(Zookeeper Ensemble)이라고 한다.
주키퍼의 핵심 기술 Znode
Znode는 디렉토리 구조 기반으로 된 Key-value 자료구조 이다.
주키퍼는 데이터를 Znode를 통해 데이터를 넣고 뺀다.(분산 시스템을 이로 구현)
Znode 종류
- Persistent Node (영속 노드)
영구저장 되는 노드(강제삭제가능) - Ephemeral Node (임시 노드)
세션이 끊어지면 자동삭제 되는 노드 - Sequence Node (연속형 노드) - 일반 Node
노드를 생성할때 자동으로 Sequence번호가 붙는 노드 (분산락 구현)
카프카 4.0 에선 주키퍼가 카프카에서 완전이 떨어 질 것이란...
카프카 토픽 삭제건을 분석하다가 주키퍼의 메타데이터와 브로커의 메타데이터가 일치하지 않을 수 있다는걸 알게 되었다.
그런 문제를 해결하기에 어쩌면 주키퍼를 제거할 필요가 있지 않았을까? 라는 생각이 들었다.
https://www.confluent.io/ko-kr/blog/removing-zookeeper-dependency-in-kafka/
'개-발 > Infra' 카테고리의 다른 글
[Kafka] Kafka Zookeeper CMAK 설치 (feat.Docker , 멀티 브로커) (0) | 2023.06.07 |
---|---|
[Kafka] Kafka 란 ? (0) | 2023.06.07 |
[Elastic] 한글형태소 분석기 (nori 설치) (2) | 2023.06.03 |
[Docker] 네트워크란 ? (0) | 2023.06.03 |
[Docker] 도커 이미지 그룹화 ( label , network ) (0) | 2023.05.29 |