“카프카가 스스로를 어떻게 관리하느냐”, “카프카의 두뇌 역할이 어디에 있느냐”에 대한 얘기
Kafka는 혼자 동작하지 않는다
카프카는 여러 대의 서버(브로커)가 모여서 하나의 클러스터로 동작
Kafka Broker 1
Kafka Broker 2
Kafka Broker 3
Markdown
복사
예시
이렇게 브로커(서버)가 3대 있다고 가정했을 때, 문제 발생 가능 :
”누가 리더일까?”, “누가 장애났는지 어떻게 알지?”, “새로운 브로커가 들어오면 누가 알려주지?”
즉, 카프카 클러스터가 정상 동작하려면 중앙에서 상태를 관리하는 두뇌가 필요. 그 역할은 과거에는 Zookeeper가, 지금의 새 버전에서는 KRaft(Kafka Raft)가 대신함
Zookeeper란?
카프카의 외부 두뇌(옛날 버전용)
카프카 초창기에는 Zookeeper라는 별도 프로그램을 써서 카프카 클러스터의 상태를 관찰했음
•
어떤 브로커(서버)가 살아있는지 체크
•
Topic / Partition / Leader 정보 저장
•
Controller 선출(Kafka 리더 서버 정하기)
•
메타데이터(토픽 구성, 클러스터 상태 등) 관리
즉, Kafka는 데이터를 저장하고 전달하는 역할, Zookeeper는 카프카 서버들을 관리하고 조율하는 역할 수행
문제점
•
운영이 복잡 : Kafka 클러스터 + Zookeeper 클러스터 2개를 따로 관리 필요
•
장애 시 복구 어려움 : Kafka랑 Zookeeper의 상태가 어긋나면 클러스터 전체가 멈춤
•
확장성 문제 : 브로커가 늘어날 수록 관리 부담 증가
KRaft 모드
이제 Zookeeper 없이 Kafka 스스로 똑똑해지자!
Kafka Raft metadata mode
(Raft는 분산 합의 알고리즘의 이름 : “누가 리더냐”를 정할 때 쓰는 방식)
Kafka 2.8.0부터 새로 생긴 모드. 이제는 Kafka가 Zookeeper없이 자체적으로 메타데이터 관리 가능. 즉, Kafka가 자기 자신의 두뇌를 내장
KRaft 모드의 구조
KRaft 모드에서는, Kafka 클러스터 내부에 Controller Node라는 브로커들이 존재
[Controller Node] ← 클러스터 상태(리더, 토픽 등) 관리
↓
[Broker Node 1] ← 실제 데이터 저장
[Broker Node 2]
[Broker Node 3]
Markdown
복사
- Controller들이 Raft 알고리즘을 사용해 “누가 리더인지” 합의
- 모든 메타데이터(Zookeeper가 하던 일)를 Kafka 내부에서 직접 관리
정리
구분 | Zookeeper 모드 (옛날 방식) | KRaft 모드 (새 방식) |
관리 주체 | Zookeeper (별도 서버 필요) | Kafka 자체 (내장 Controller) |
버전 | Kafka 2.x 이하 | Kafka 3.x 이상 (정식 기본) |
설치 복잡도 | 두 클러스터 필요 (Kafka + ZK) | 하나의 Kafka 클러스터만 있으면 됨 |
합의 방식 | Zookeeper 자체 프로토콜 | Raft 합의 알고리즘 |
장애 복구 | ZK와 Kafka 둘 다 복구해야 함 | Kafka 내부에서만 복구 가능 |
추천 여부 |
Zookeeper 모드
┌────────────────────┐
│ Zookeeper(클러스터) │
└─────────┬──────────┘
│ 메타데이터 / 상태 관리
▼
┌──────────┐
│ Controller│ (Kafka와 별개로 ZK에 의해 컨트롤)
└────┬─────┘
│
▼
┌───────────────┐
│ Kafka Broker │ <- Broker 들이 토픽/파티션을 호스팅
└────┬─────┬────┘
│ │
┌──────▼┐ ┌──▼────┐ ┌──▼────┐
│Broker│ │Broker│ │Broker│
└──────┘ └──────┘ └──────┘
Markdown
복사
KRaft 모드 (Zookeeper 없이 Kafka 자체가 메타데이터 관리)
┌────────────────────────────────┐
│ Kafka Controller Nodes (Raft) │ ← Raft 합의로 메타데이터 관리
└──────────────┬─────────────────┘
│
▼
┌───────────────┐
│ Kafka Broker │ <- Controller 기능이 Kafka 내부에 통합됨
└────┬─────┬────┘
│ │
┌─────────▼┐ ┌──▼────┐ ┌──▼────┐
│Broker │ │Broker │ │Broker │
└────────┘ └──────┘ └──────┘
Markdown
복사
