728x90
Rebalance가 발생하는 상황
- Consumer Group내에 새로운 Consumer가 추가되거나 기존 Consumer가 종료될 때, 또는 Topic에 새로운 Partition이 추가될 때
- session.timeout.ms 이내에 Heartbeat이 응답이 없거나, max.poll.interval.ms 이내에 poll( ) 메소드가 호출되지 않을 경우
Eager 모드



- Rebalance 수행 시, 기존 Consumer들의 모든 파티션 할당을 취소하고 잠시 메시지를 읽지 않는다.
- 이후 새롭게 Consumer에 파티션을 다시 할당받고 메시지를 읽는다.
- 모든 Consumer가 잠시 메시지를 읽지 않는 시간으로 인해 Lag가 상대적으로 크게 발생할 가능성이 있다.
- 파티션 할당 전략 (partition.assignment.stragegy) 중 Range, Round Robin, Sticky 방식이 여기에 해당한다.
Cooperative 모드



- Rebalance 수행 시 기존 Consumer들의 모든 파티션 할당을 취소하지 않고 대상이 되는 Consumer들에 대해서만 동작한다.
- 파티션이 전진적으로 Consumer를 할당하면서 Rebalance 진행한다.
- 전체 Consumer가 메시지 읽기를 중지하지 않고, 개별 Consumer가 협력적으로 영향을 받는 파티션만 Rebalance로 재분배
- 많은 Consumer를 가지는 Consumer Group 내에서 Rebalance 시간이 오래 걸릴 시 활용도가 높다.
- 파티션 할당 전략( partition.assignment.stragegy) 중 Cooperative Sticky 전략에 해당한다.
Consumer 파티션 할당 전략
| 파티션 할당 전략 | 내용 |
| Range 할당 전략 | - 서로 다른 2개 이상의 Topic의 Consumer들이 Subscription 할 시, Topic별 동일한 파티션을 특정 Consumer에게 할당하는 전략 - 여러 Topic 들에서 동일한 키값으로 되어 있는 파티션은 특정 Consumer에 할당하여 Consumer가 여러 Topic의 동일한 키값으로 데이터 처리를 용이하게 할 수 있도록 지원한다. |
| Round Robin 할당 전략 | - 파티션별로 Consumer들이 균등하게 부하를 분배할 수 있도록 여러 Topic의 파티션의 Consumer들에게 순차적으로 할당(Round Robin 방식) |
| Sticky 할당 전략 | - 최초에 할당된 파티션과 Consumer 매핑을 Rebalance가 수행되어도 가급적 그대로 유지할 수 있도록 지원하는 전략 - 하지만 Eager 프로토콜 기반으로, Rebalance 수행 시 모든 Consumer 파티션 매핑이 해제된 후 다시 매핑되는 형식이다. |
| Cooperative Sticky 할당 전략 | - 최초에 할당된 파티션과 Consumer 매핑을 Rebalance가 수행되어도 가급적 그대로 유지할 수 있도록 지원 - Cooperative 프로토콜 기반으로 Rebalance 시, 모든 Consumer의 파티션 매핑이 해제되지 않고 Rebalance과 연관된 파티션과 Consumer만 재매핑된다. |
Range


- Range는 서로 다른 Topic들의 동일한 파티션들을 같은 Consumer로 할당한다.
- 서로 다른 Topic에서 동일한 키 값을 가지는 파티션은 같은 Consumer에서 처리할 수 있도록 유도한다.
- Default 파티션 할당 방식이다.
Round Robin



- Round Robin은 Topic들의 파티션별로 순차적으로 Consumer에 할당하므로 파티션 매핑이 Consumer 별로 비교적 균일하게 할당된다.
- Round Robin의 경우 Rebalance 시에도 Topic들의 파티션과 Consumer들을 균등하게 매핑하려고 하므로, Rebalance 이전의 파티션과 Consumer들의 매핑이 변경되기 쉽다.
Sticky

- Rebalance 시, 기존 토픽들의 파티션과 Consumer 매핑은 최대한 유지한다.
- 재할당되어야 하는 파티션들만 Consumer들에게 할당한다.
- 하지만 모든 Consumer들의 파티션이 일제히 취소되는 Eager 프로토콜 기반에서 동작한다.
Cooperative Sticky

- Sticky와 유사하지만 모든 매핑을 다 취소하지 않는다.
- 재할당되어야 하는 파티션들만 Consumer에 따라 순차적으로 Rebalance를 수행하여 할당한다.
- Cooperative 프로토콜 기반에서 동작하기 때문에 대상이 되는 Consumer들에 대해서만 동작한다.
728x90
'카프카 > Java 기반 카프카 클라이언트 구현, Consumer 내부 메커니즘 2' 카테고리의 다른 글
| Consumer에서 여러 개의 Topic 읽기 (0) | 2025.10.18 |
|---|---|
| Consumer의 Heartbeat 스레드와 관련 주요 파라미터 (0) | 2025.10.18 |
| Consumer의 Heartbeat 스레드와 관련 주요 파라미터 (0) | 2025.10.18 |
| Consumer의 Static Group Membership (0) | 2025.10.18 |