새소식

반응형
Kafka

[Kafka] Consumer 내부 동작 원리

  • -
반응형

컨슈머 오프셋 관리

  • 컨슈머의 오프셋의 역할은 메시지의 위치를 나타내는 것입니다
  • 오프셋이 중요한 이유는 컨슈머가 일시적으로 동작을 멈추고 재시작하는 경우에 새로운 컨슈머가 기존 컨슈머의 역할을 대신하는 경우에 기존 컨슈머의 마지막 메시지 위치부터 새로운 컨슈머가 메시지를 가져오기 때문입니다
  • 토픽에 저장하여 관리

 

그룹 코디네이터

컨슈머 그룹이 구독한 토픽의 파티션들과 그룹의 멤버들을 트래킹

 

스태틱 멤버십(Static Membership)

  • 컨슈머 그룹 내에서 컨슈머가 재시작 등으로 컨슈머 그룹에서 나갔다가 다시 합류하더라도 리밸런싱이 일어나지 않게 하는 기능
  • group.instance.id값을 컨슈머를 식별하기 위한 고유값을 입력
    • default : null
  • 스태틱 멤버십 또한 session.timeout.ms 시간을 넘어갈 경우 리밸런싱이 똑같이 일어난다
  • 컨슈머 리밸런싱 동작이 일어나면 그룹에 떠나는 컨슈머에만 적용되는 것이 아니라 그룹 내 전체 컨슈머를 대상으로 동작한다

 

컨슈머 파티션 할당 전략

컨슈머 파티션 할당 전략은 프로듀서의 파티셔너가 어떤 파티션으로 메시지를 전송할지 결정했던 것처럼 컨슈머가 어떤 파티션의 메시지를 읽어올지를 결정하는 정책

  • RangeAssignor
  • RoundRobinAssignor
  • StickyAssignor
  • CooperativeStickyAssignor

 

레인지 파티션 할당 전략

  • 파티션 할당 전략의 기본값
  • 동일한 메시지 키를 사용하고 하나의 컨슈머 그룹이 동일한 파티션 수를 가진 2개 이상의 토픽을 컨슘 할 때 유용
    • 동일한 키값을 갖고 있는 두 토픽의 파티션을 하나의 컨슈머가 컨슘 하기 때문
  • consumer 1번에서 4개의 파티션을 소비.. 다소 불균형 

출처 : https://devocean.sk.com/community/detail.do?ID=165478

 

라운드 로빈 파티션 할당 전략

출처 : https://devocean.sk.com/community/detail.do?ID=165478

 

스티키 파티션 할당 전략

  • 리밸런싱 작업이 일어나기 전의 컨슈머의 파티션 정보를 우선으로 매핑해 주는 전략
  • 리밸런싱이 일어날 경우 기존에 매핑됐던 파티션과 컨슈머를 최대한 유지하려고 하는 전략
  • 스키마 파티션 할당 전략은 두 가지 목적으로 컨슈머에 파티션을 할당합니다. 
    • 첫 번째 목적은 가능한 균형 잡힌 파티션을 할당하는 것 
    • 두 번째 목적은 재할당이 발생할 때 되도록 기존의 할당된 파티션 정보를 보장하는 것

 

협력적 스티키 파티션 할당 전략

  • 스티키 파티션 할당 전략과 동일
  • 즉 리밸런싱이 일어나도 기존의 컨슈머와 파티션 매핑은 유지하고 최소한의 파티션만 컨슈머와 매핑
  • 스티키 파티션보다 한 가지 차이점이 존재하는데 내부 리밸런싱 동작이 한층 더 고도화
    • COOPERATIVE 리밸런싱 프로토콜은 동작 중인 커너슈머들에게 영향을 주지 않는 상태에서 몇 차례에 걸쳐 리벨런싱이 이뤄진다
    • <-> EAGER 리밸런스 프로토콜 (리밸런스시 모든 파티션과 컨슈머의 연결을 끊는 것)
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.