////
Search
📝

Zookeeper vs KRaft

“카프카가 스스로를 어떻게 관리하느냐”, “카프카의 두뇌 역할이 어디에 있느냐”에 대한 얘기

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 내부에서만 복구 가능
추천 여부
(점점 사라짐)
(Kafka 4.0부터 기본 모드)
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
복사