핵심 요약
Kafka 4.0이 KRaft-only로 출시되며 ZooKeeper 지원이 완전히 제거됐다. 3.x에서 마이그레이션하지 않은 클러스터는 4.0으로 못 올라간다. 24브로커 프로덕션 클러스터를 무중단 전환한 결과 컨트롤러 메타데이터 전파 60% 빨라지고 운영 컴포넌트 50% 감소.
1. 왜 KRaft인가
- 운영 단순화: ZooKeeper 앙상블 별도 운영 불필요
- 메타데이터 전파 속도: Raft 기반 자체 로그
- 파티션 확장: 200만 파티션까지 검증
- 스타트업 시간: 대규모 클러스터 재시작이 60% 단축
2. 사전 체크
# 1. Kafka 버전 확인 (3.7+ 필요)
kafka-broker-api-versions.sh --bootstrap-server localhost:9092
# 2. inter.broker.protocol.version 확인
grep "inter.broker.protocol.version" server.properties
# 3.7 이상이어야 함
# 3. 클라이언트 호환성 — 모든 producer/consumer가 3.0+ 클라이언트인지 확인
3. 마이그레이션 11단계
- Kafka 3.9로 업그레이드 완료
- KRaft 컨트롤러 쿼럼(3~5노드) 별도 구성
- controller.quorum.voters 설정
- 마이그레이션 모드 활성화
- 컨트롤러 시작 → ZK 메타데이터 복제 대기
- 브로커를 KRaft 모드로 롤링 재시작
- 마이그레이션 완료 상태 확인
- ZK 연결 제거
- 브로커 재시작
- ZooKeeper 앙상블 종료
- Kafka 4.0으로 업그레이드
4. 컨트롤러 쿼럼 구성
# controller.properties
process.roles=controller
node.id=1
controller.quorum.voters=1@ctrl1:9093,2@ctrl2:9093,3@ctrl3:9093
listeners=CONTROLLER://:9093
controller.listener.names=CONTROLLER
log.dirs=/var/lib/kafka/metadata
# 클러스터 ID 생성 (한 번만)
kafka-storage.sh random-uuid
# 각 컨트롤러에 포맷
kafka-storage.sh format -t xtzWWN4bTjitpL3kfd9s5g -c controller.properties
5. 마이그레이션 모니터링
# 진행 상태
kafka-metadata-quorum.sh --bootstrap-controller ctrl1:9093 describe --status
# 핵심 메트릭
# - ZkMigrationState: PRE_MIGRATION → MIGRATION → POST_MIGRATION
# - MetadataOffset이 ZK와 KRaft 양쪽에서 같은지
6. 실측 — 운영 변화
| 지표 | ZK 모드 | KRaft | 변화 |
|---|---|---|---|
| 운영 노드 수 | 24브로커 + 5 ZK | 24 + 3컨트롤러 | -17% |
| 전체 클러스터 콜드 스타트 | 14분 | 5분 30초 | -60% |
| 토픽 생성 지연(p99) | 180ms | 72ms | -60% |
| 리더 선출 시간 | 2.4s | 0.8s | -66% |
7. 함정
- __consumer_offsets 리더 쏠림: 마이그레이션 직후 재배포 필요
- ACL 마이그레이션: SimpleAclAuthorizer는 자동, 커스텀은 수동
- 모니터링 도구: ZK 의존 도구는 동작 안 함. Conduktor/AKHQ로
- 중간 상태 장기 유지 금지: 마이그레이션 모드는 며칠 안에 완료
8. 권장 일정
- 지금: 3.7~3.9 운영 중인 클러스터는 사전 점검 시작
- 3개월 내: 스테이징에서 마이그레이션 리허설 1회 이상
- 6개월 내: 프로덕션 마이그레이션 완료 후 4.0 업그레이드
참고
- kafka.apache.org/documentation/#kraft
- cwiki.apache.org/confluence/display/KAFKA/KIP-866

댓글 0