6.4 컨슈머 파티션 할당 전략
- 파티셔너가 레코드를 어떤 토픽 파티션에게 전달할지 결정했던 것처럼 컨슈머도 어떤 토픽 파티션으로부터 레코드를 읽어올지 결정한다.
- 컨슈머 그룹의 리더 컨슈머가 파티션 할당 전략에 따라 각 컨슈머와 파티션을 매칭시킨다.
파티션 할당 전략 |
설명 |
레인지 파티션 할당 전략 |
파티션 할당 전략의 기본값, 토픽별로 할당 전략을 사용함. 동일 키를 이용하는 2개 이상 토픽을 컨슘할 때 유용 |
라운드 로빈 파티션 할당 전략 |
사용 가능한 파티션과 컨슈머들을 균등 분배 |
스티키 파티션 할당 전략 |
컨슈머가 컨슘하고 있는 파티션을 계속 유지 |
협력적 스티키 파티션 할당 전략 |
스티키와 유사하지만 전체 일시 정지가 아닌 연속적인 재조정 방식 |
6.4.1 레인지 파티션 할당 전략
- 레인지 파티션 할당 전략
- 먼저 구독하는 토픽에 대한 파티션을 순서대로 나열한 후 컨슈머를 순서대로 정렬
- 그 다음 각 컨슈머가 몇 개 파티션을 할당해야 하는지 전체 파티션 수를 컨슈머 수로 나눈다.
- 컨슈머와 파티션 수가 일치하면 균등하게 할당되지만 그렇지 않으면 앞쪽 컨슈머들이 추가 파티션을 할당 받는다.
graph LR
subgraph Consumer Group
C1[컨슈머1]
C2[컨슈머2]
end
subgraph TopicA
A0[파티션A-0]
A1[파티션A-1]
A2[파티션A-2]
end
subgraph TopicB
B0[파티션B-0]
B1[파티션B-1]
B2[파티션B-2]
end
A0 --> C1
A1 --> C1
B0 --> C1
B1 --> C1
A2 --> C2
B2 --> C2
- 위 그림처럼 수가 맞지 않으면 한 컨슈머에 파티션 할당이 몰린다.
- 레인지 할당 전략이 유용한 경우
- 동일한 레코드 키를 사용
- 그리고 하나의 컨슈머 그룹이 동일한 파티션 수를 가진 2개 이상 토픽을 컨슘할 때
- 같은 인덱스의 파티션들이 한 컨슈머에 모여 데이터 순서와 처리 일관성이 보장된다.
- 위 그림에서도 파티션 0번들은 컨슈머 1에 몰린다
6.4.1 라운드 로빈 파티션 할당 전략
- 컨슘해야 하는 모든 파티션과 컨슈머 그룹 내 모든 컨슈머를 나열한 후 라운드 로빈으로 하나씩 할당하는 전략
- 하나씩 번갈아가며 할당하기에 레인지 파티션 전략보다 더 균등하게 매핑할 수 있다.
6.4.3 스티키 파티션 할당 전략
- 컨슈머 그룹의 리밸런싱이 발생하면 위의 전략들에선 기존 매핑됐던 파티션과 동일한 컨슈머가 다시 매핑되지 않는다.
- 재할당이 발생하더라도 기존 매핑을 유지하려고 하는 전략이 바로 스티키 파티션 할당 전략이다.
- 스티키 파티션 할당 전략의 두 가지 목적
- 균형 잡힌 파티션 할당 (더 우선순위가 높음)
- 되도록 기존 할당된 파티션 정보를 보장
- 균등 분배의 우선순위가 더 높으므로 이를 우선시해서 기존 매핑을 유지하지 않고 새 연결을 만들 수도 있다.
- 스티키 파티션 할당 전략의 규칙
- 컨슈머들의 최대 할당된 파티션 수의 차이는 1
- 기존 존재하는 파티션 할당은 최대한 유지
- 재할당 동작 시 유효하지 않은 모든 파티션 할당은 제거
- 할당되지 않은 파티션들은 균형을 맞추는 방법으로 컨슈머들에게 할당
6.4.4 협력적 스티키 파티션 할당 전략
- 기존 리밸런싱에선 내부적으로 EAGER라는 리밸런스 프토코콜을 사용했다.
- 리밸런싱 시 컨슈머에 할당된 모든 파티션을 취소하는 방식
- 컨슈머들의 소유권을 변경해야 하는 경우가 있기 때문
- 그룹 내에서 여러 파티션들에 대해 소유권 변경 작업이 동시에 이루어져야 하기 때문
- 하지만 모든 파티션 할당을 취소하면 컨슈머들의 다운타임에서 큰 문제가 된다.
- 스태틱 멤버십을 통해 불필요한 리밸런싱을 줄여도, 불가피하게 발생한다면 큰 부담이 된다.
- 이를 개선하기 위해 2.3 버전부터 협력적 스티키 파티션 할당 전략이 등장했다.
- EAGER가 아닌 COOPERATIVE 프로토콜을 적용하기 시작했다.
- 협력적 스티키 파티션 할당 전략에서의 차별점
- 동작 중인 컨슈머들에게 영향을 주지 않으며 몇 차례에 걸쳐 리밸런싱이 이루어진다.
- 파티션 재배치가 필요하지 않은 컨슈머들은 다운타임 없이 계속 동작한다.
- 점진적인 리밸런싱이 진행되고 최종적으로 컨슈머들을 균형 잡힌 분산을 하게 된다.