카프카/Java 기반 카프카 클라이언트 구현, Consumer 내부 메커니즘 2

eager, cooperative 프로토콜과 파티션 할당 전략

webmaster 2025. 10. 19. 10:56
728x90

Rebalance가 발생하는 상황

  • Consumer Group내에 새로운 Consumer가 추가되거나 기존 Consumer가 종료될 때, 또는 Topic에 새로운 Partition이 추가될 때
  • session.timeout.ms 이내에 Heartbeat이 응답이 없거나, max.poll.interval.ms 이내에 poll( ) 메소드가 호출되지 않을 경우

Eager 모드

신규 Consumer Join
Eager 모드
Rebalance

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

Cooperative 모드

신규 Consumer Join
Cooperative
Rebalance

  • 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 방식 Partition 3개 할당
Range 방식 Partition 2개 할당

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

Round Robin

Round Robin 방식 Partition 3개 할당
Round Robin 방식 Partition 2개 할당
Round Robin 방식 Rebalance

  • 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