리눅스/kafka
consumer partition 할당 전략 종류( range , roundRobin , sticky , cooperative sticky )
정지홍
2024. 10. 21. 16:48

Range 할당 전략
- kafka의 기본 파티션 할당 전략
- 파티션을 범위로 나누어서 할당하는 방식
- 파티션을 순차적으로 나누고, 각 consumer가 하나 이상의 연속된 파티션을 할당받음
- 동작 방식...
- 1. consumer ID와 topic의 partition을 정렬
- ex) consumer1, consumer2, consumer3처럼 정렬하고, 파티션도 partition 0, partition 1, partition 2로 정렬
- 2. 각 cinsumer에게 할당될 파티션 범위를 계산
- 파티션 수를 consumer 수로 나누어서 몇 개의 파티션을 할당하는 방식
- 3. 파티션을 순서대로 나누어서 각 consumer에게 할당.
- 연속된 파티션을 할당하니, 같은 topic안의 파티션을 여러개 가진 consumer가 존재 가능
- 1. consumer ID와 topic의 partition을 정렬
- 장점
- 파티션이 연속적으로 할당되니, consumer가 데이터의 일정한 범위를 담당하게 됨
- 간단하다
- 단점
- 파티션이 균등하지 않을수 있음. 즉, 파티션이 특정 consumer에게 몰릴 수도 있음
- consumer 그룹의 크기가 작거나 너무 크면, 특정 consumer에게 과도한 파티션이 할당될 수 있음

Round Robin 할당 전략
- 원형 순환 방식으로 고르게 나누어 할당하는 전략
- 모든 consumer가 가능한 동일한 수의 partition을 할당 받음
- 동작 과정...
- 1. consumer 및 파티션 정렬
- 2. 라운드 로빈 방식으로 할당
- 예시...
- 만약 consumer 3 , partition 6 존재시...
- consumer 1 : partition 0 3
- consumer 2 : partition 1 4
- consumer 3 : partition 2 5
- 만약 consumer 3 , partition 6 존재시...
- 장점
- 파티션이 고르게 분배
- 단점
- 같은 topic안에서 연속된 파티션을 하나의 consumer가 담당하는게 아니라서, 파티션간의 연속성이 보장 안됨
- partition or consumer가 많아질수록 라운드 로빈 순환이 복잡해짐
props.setProperty( ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG , RoundRobinAssignor.class.getName() );
Stickt 할당 전략
- consumer가 기존에 할당된 파티션을 최대한 유지하는 것을 목표
- 최소한의 변경 및 고른 분배가 목표
- 과정...
- consumer 3 , partition 6 존재시 새로운 consumer가 추가 or 삭제될때, 기존 consumer들은 할당 받은 파티션들을 최대한 유지
- 장점
- consumer 그룹의 안전성 및 데이터 처리 연속성 보장
cooperative sticky 할당 전략
- cooperative sticky assignor는 sticky assignor에서 더 발전된 형태로, 중단 없는 리밸런싱을 목표로 한다.
- 기존의 파티션을 유지하며 점진적 리벨런싱을 한다
- 단점
- 구현의 복잡함
- rebalacing 시 소수의 파티션만 이동하니, 큰 규모인 경우 처리 속도가 느림
- 장점
- 소비 중단의 최소화
props.setProperty( ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG , CooperativeStickyAssignor.class.getName());




