이번에는 kafka cluster를 구성하는 broker와 zookeeper 에 대해 알아본다.
Broker
Kafka Broker는 topic과 partition을 유지 및 관리해주는 소프트웨어이다. Partition에 대한 Read 및 Write를 관리해준다. Kafka Broker는 kafka server라고 부르기도 한다.
- kafka topic 내의 partition들을 이 broker 상에 분산 배치하고 유지 및 관리를 해줌
- 각각의 Broker들은 ID (숫자)로 식별
- Broker ID와 Partition ID 간에는 아무런 관계가 없음
- topic의 일부 Partition들을 포함
- Topic을 만들때 만들어지는 partition들이 broker에 분산되어 들어가기 때문
- 이는 하나의 broker에 모든 partition이 다 들어 있다가 broker가 망가지면 생기는 문제들을 방지하기 위함
- 최소 3대 이상의 Broker를 하나의 Cluster로 구성해야함 (안정성을 위해 4대 이상을 권장함)
Bootstrap server (= broker server)
Client는 bootstrp server라는 파라미터로 kafka cluster에 연결할 수 있다. bootstrp server는 kafka cluster 내에 있는 전체 브로커들을 의미한다.
각각의 Broker는 모든 Broker, Topic, Partition에 대해 알고 있다(Metadata). 그렇기 때문에 Client는 특정 Broker에 연결하면 전체 클러스터에 연결할 수 있다. client가 하나의 broker에 연결하면 그 broker가 전체 broker의 리스트를 전달해주고, 이 리스트를 통해서 내가 접속해야 할 topic과 그 topic을 구성하는 partition이 어디에 있는지 알게 되어 자동으로 자기가 필요한 broker쪽으로 접속해서 연결하는 방식이다. 하지만 장애를 대비해서 전체 broker list를 파라미터로 입력하는 것을 권장한다.
Zookeeper
Zookeeper는 Broker를 관리 (Broker 들의 목록/설정을 관리)하는 소프트웨어이다.
- Zookeeper는 변경사항에 대해 Kafka에 알림
- Topic 생성/제거, Broker 추가/제거등
- Zookeeper 없이는 Kafka가 작동할 수 없음
- (KIP : Kafka Improvement Proposal 500) Zookeeper 제거가 진행 중
- 2022년에 Zookeeper를 제거한 정식 버전 출시 예정
- Zookeeper는 홀수의 서버로 작동하게 설계되어 있음 (최소3, 권장5)
- Quorum 알고리즘 기반
- Quorum(쿼럼) 은 “정족수”이며, 합의체간 의사를 진행시키거나 의결을 하는데 필요한 최소한도의 인원수를 뜻함
- 분산 코디네이션 환경에서 예상치 못한 장애가 발생해도 분산시스템의 일관성을 유지시키기 위해서 사용
- Ensemble이 3대로 구성되었다면 Quorum은2,즉 Zookeeper 1대가 장애가 발생하더라도 정상 동작
- Ensemble이 5대로 구성되었다면 Quorum은3,즉 Zookeeper 2대가 장애가 발생하더라도 정상 동작
- Zookeeper에는 Leader(writes)가 있고 나머지 서버는 Follower(reads)
- Zookeeper는 kafka에 broker가 몇개인지, partition이 몇개인지 등의 정보들을 다 가지고 있음
- 이 정보들을 Leader가 메인으로 가지고 있고 Follwer는 Leader에서 데이터를 가져가서 동기화함
Zookeeper는 멀티 Kafka Broker들 간의 정보(변경사항 포함)를 공유하고 동기화를 수행한다.