devops

Kafka Consumer의 Offset, Group Cordinator와 파티션 할당 전략 본문

DevOps/Kafka

Kafka Consumer의 Offset, Group Cordinator와 파티션 할당 전략

vata500 2022. 11. 20. 22:18
반응형

컨슈머의 주요 역할은 카프카에 저장된 메시지를 당겨오는 것이다. 메시지를 당기는데 중요한 요소인 오프셋과 그룹 코디네이터, 파티션 할당 전략을 간단히 정리해보려고 한다.

1) 오프셋 (Offset)

https://www.confluent.io/blog/apache-kafka-data-access-semantics-consumers-and-membership/

오프셋 관리는 컨슈머의 동작 중에 핵심이라고 볼 수 있다. 컨슈머는 카프카에 저장된 메시지를 꺼내기 때문에 컨슈머가 메시지를 어디까지 가져왔는지를 표시하고 확인하는 것은 중요하다.

여기서 메시지의 위치를 나타내는 것을 오프셋이라고 한다.

  • 이 오프셋은 숫자 형태로 저장된다.
  • 컨슈머 그룹은 오프셋 정보를 카프카의 토픽에 저장한다. (__consumer_offsets 토픽에 각 컨슈머 그룹 별 오프셋 위치 정보가 기록됨)

2) 그룹 코디네이터(Group Cordinator)

https://developer.confluent.io/learn-kafka/architecture/consumer-group-protocol/

컨슈머 그룹에서 컨슈머들은 속한 컨슈머 그룹에서 떠날 수 있고, 새로운 컨슈머가 합류할 수 있다. 그래서 컨슈머 그룹은 각 컨슈머들에게 작업을 균등하게 분배할 수 있어야한다.

이 균등하게 분배하는 것을 컨슈머 리밸런싱이라고 부른다

  • 컨슈머 그룹이 구독한 토픽의 파티션과 그룹 멤버들을 트래킹하는데 목적이 있다.
  • 파티션과 그룹 멤버에 변화가 있으면 작업을 균등하게 재분배하기 위한 컨슈머 리밸런싱 동작이 실행된다.
  • 그룹 코디네이터는 각 컨슈머 그룹별로 존재하며, 카프카 클러스터 내의 브로커 중 하나에 위치한다.

3) 파티션 할당 전략

컨슈머는 토픽의 어느 파티션에서부터 레코드를 잃어올 지 결정하는 파티션 할당 전략이 있다. 크게 4가지로 나뉜다.

3-1) 레인지 파티션 할당 전략

https://medium.com/streamthoughts/understanding-kafka-partition-assignment-strategies-and-how-to-write-your-own-custom-assignor-ebeda1fc06f3

레인지 파티션 할당 전략은 기본적인 파티션 할당 전략으로, 각 토픽별로 할당 전략을 사용한다.

  1. 구독하는 토픽에 대한 파티션을 순서대로 나열하고 컨슈머를 순서대로 정렬한다.
  2. 컨슈머가 몇 개의 파티션을 할당해야할 지 전체 파티션 수를 컨슈머 수로 나눈다.
  3. 균등하게 나눠지지 않는 경우 앞쪽의 컨슈머들이 추가 파티션을 할당받는다.

이렇게 되면 컨슈머에 균등하게 파티션 부냅가 되지 않기 때문에 컨슈머 그룹은 불균형한 상태로 운영될 수 있다.

3-2) 라운드 로빈 파티션 할당 전략

https://medium.com/streamthoughts/understanding-kafka-partition-assignment-strategies-and-how-to-write-your-own-custom-assignor-ebeda1fc06f3

  1. 파티션과 전체 컨슈머들을 나열한다.
  2. 나열된 파티션을 컨슈머들과 하나씩 라운드 로빈 방식으로 일대일로 매핑한다.

라운드 로빈 파티션 할당은 파티션과 컨슈머 매핑을 레인지보다 더 균등하게 할 수 있다.

3-3) 스티키 파티션 할당 전략

https://medium.com/streamthoughts/understanding-kafka-partition-assignment-strategies-and-how-to-write-your-own-custom-assignor-ebeda1fc06f3

컨슈머 그룹의 리밸런싱 동작으로 파티션이 재활당되면 기존에 매핑되었던 파티션과 동일한 컨슈머가 매핑되는 것을 보장할 수 있다.

  • 컨슈머들의 최대로 할당된 파티션 수 차이는 1
  • 기존 존재하는 파티션 할당은 최대한 유지
  • 재할당 동작에 유효하지 않는 모든 파티션 할당은 제거
  • 할당되지 않은 파티션은 균형을 맞추는 방식으로 컨슈머에 할당

스티키 파티션은 재할당 작업이 발생해도 기존에 매핑됐던 파티션과 컨슈머를 최대한 유지하기 위해 사용하는 전략이다. 

반응형
Comments