— Range, RoundRobin, Sticky, CooperativeStickyAssignor까지
Kafka를 운영하다 보면 리밸런싱(rebalancing) 때문에 처리 지연이나 순간적인 서비스 흔들림을 경험하게 된다.
이 문제의 핵심에는 파티션 할당 전략(Partition Assignment Strategy) 이 있다.
이 글에서는 Apache Kafka의 컨슈머 그룹에서 파티션이 어떻게 할당되는지,
그리고 왜 CooperativeStickyAssignor가 등장했는지를 흐름 중심으로 설명한다.
1. 파티션 할당 전략이란?
파티션 할당 전략이란,
컨슈머 그룹 내에서 “어떤 컨슈머가 어떤 파티션을 읽을지”를 결정하는 규칙
이다.
컨슈머 그룹에서 아래와 같은 이벤트가 발생하면 리밸런싱이 트리거된다.
- 컨슈머 추가 / 제거
- 컨슈머 재시작
- 파티션 수 변경
- 세션 타임아웃 발생
이때 할당 전략에 따라
- 파티션 이동량
- 처리 중단 시간
- 시스템 안정성
- 이 크게 달라진다.
2. 리밸런싱 방식의 근본 차이
Eager vs Cooperative
Eager 리밸런싱 (전통 방식)
- 모든 컨슈머가 자신의 파티션을 전부 반납
- 이후 전체를 다시 재할당
- 결과적으로 stop-the-world 현상 발생
“잠깐이지만, 전부 멈췄다가 다시 시작”
Cooperative 리밸런싱 (점진적 방식)
- 이동이 필요한 파티션만 부분 반납
- 나머지 파티션은 계속 처리
- 중단 범위를 최소화
“필요한 것만 조금씩 이동”
이 차이가 StickyAssignor ↔ CooperativeStickyAssignor의 핵심 배경이다.
3. RangeAssignor
가장 오래된 기본 전략
동작 방식
- 토픽 단위로 파티션을 정렬
- 연속된 범위(range)를 컨슈머에 할당
예시
Topic A:P0~P5
Consumer2명
C1:P0,P1,P2
C2:P3,P4,P5
특징
- 단순하고 예측 가능
- 여러 토픽 구독 시 불균형 발생 가능
- 리밸런싱 시 전체 반납(Eager)
적합한 경우
- 단일 토픽
- 파티션 수가 적고 단순한 구조
4. RoundRobinAssignor
균등 분배를 우선하는 전략
동작 방식
- 모든 토픽·파티션을 하나의 리스트로 구성
- 컨슈머에게 순환 배분
특징
- 컨슈머 간 파티션 수가 비교적 균등
- 리밸런싱 시 파티션 이동량이 큼
- 상태ful 컨슈머에는 불리
적합한 경우
- 다수 토픽
- “균등 분배”가 최우선 목표일 때
5. StickyAssignor
“이동을 최소화하자”
StickyAssignor의 목표는 두 가지다.
- 균형(balanced)
- 기존 할당 최대 유지(sticky)
즉,
리밸런싱이 발생하더라도 가능한 한 파티션을 옮기지 말자
하지만 중요한 한계
- 여전히 Eager 리밸런싱
- 순간적으로는 전체 파티션 반납 → 재할당
적합한 경우
- 상태를 들고 있지만
- 완전 무중단까지는 필요 없는 환경
6. CooperativeStickyAssignor
운영 환경에서 사실상 정답
CooperativeStickyAssignor는 StickyAssignor의 철학을 유지하면서
리밸런싱 방식을 Cooperative(점진적) 으로 바꾼 전략이다.
핵심 특징
- 기존 파티션 할당 최대한 유지
- 이동이 필요한 파티션만 단계적으로 이동
- 리밸런싱 중에도 처리 지속 가능
리밸런싱 흐름
- 이동 대상 파티션만 일부 revoke
- 새 컨슈머에게 assign
- 나머지는 계속 처리
“전체 중단 없는 리밸런싱”
운영 환경에서의 체감 효과
- GC pause
- 컨슈머 재시작
- 일시적 네트워크 지연
→ 이런 상황에서도 리밸런싱 폭발 방지
주의사항
- 컨슈머 그룹 전체가 Cooperative assignor를 사용해야 함
- 동일 그룹 내 혼용 불가
- 롤링 업그레이드 시 순서 필요
7. 전략 선택 가이드
| 상황 | 추천 전략 |
| 단순, 학습/테스트 | Range |
| 균등 분배 최우선 | RoundRobin |
| 상태ful 컨슈머 | Sticky |
| 운영 환경 / 무중단 | CooperativeSticky |
8. 정리 한 문장
Kafka 파티션 할당 전략은 “얼마나 잘 나누느냐”보다 “리밸런싱 때 얼마나 덜 흔들리느냐”를 결정한다.
그리고 실무에서는
👉 CooperativeStickyAssignor가 가장 안전한 선택이다.
하지만 kafka 4.x 대 가 나오면서 변화가 생겼다.
다음 포스팅에서 다루도록 하겠습니다.
https://rainbound.tistory.com/1369
Kafka 4.x 이후 리밸런싱 프로토콜 변화
— 왜 “컨슈머가 파티션을 나누지 않게” 되었나Kafka 4.x에 들어서면서 컨슈머 리밸런싱 모델이 구조적으로 바뀌었다.이 변화의 핵심은 **“리밸런싱 로직을 컨슈머에서 브로커로 옮겼다”**는
rainbound.tistory.com
'Kafka' 카테고리의 다른 글
| Kafka 4.x 이후 리밸런싱 프로토콜 변화 (0) | 2026.02.10 |
|---|---|
| [Kafka] Raft 알고리즘 (1) | 2025.09.29 |
| Kafka Consumer Group (0) | 2025.09.29 |
| Event Driven Architecture란? (0) | 2022.06.30 |
댓글