devops
Kafka Consumer의 Offset, Group Cordinator와 파티션 할당 전략 본문
컨슈머의 주요 역할은 카프카에 저장된 메시지를 당겨오는 것이다. 메시지를 당기는데 중요한 요소인 오프셋과 그룹 코디네이터, 파티션 할당 전략을 간단히 정리해보려고 한다.
1) 오프셋 (Offset)
오프셋 관리는 컨슈머의 동작 중에 핵심이라고 볼 수 있다. 컨슈머는 카프카에 저장된 메시지를 꺼내기 때문에 컨슈머가 메시지를 어디까지 가져왔는지를 표시하고 확인하는 것은 중요하다.
여기서 메시지의 위치를 나타내는 것을 오프셋이라고 한다.
- 이 오프셋은 숫자 형태로 저장된다.
- 컨슈머 그룹은 오프셋 정보를 카프카의 토픽에 저장한다. (__consumer_offsets 토픽에 각 컨슈머 그룹 별 오프셋 위치 정보가 기록됨)
2) 그룹 코디네이터(Group Cordinator)
컨슈머 그룹에서 컨슈머들은 속한 컨슈머 그룹에서 떠날 수 있고, 새로운 컨슈머가 합류할 수 있다. 그래서 컨슈머 그룹은 각 컨슈머들에게 작업을 균등하게 분배할 수 있어야한다.
이 균등하게 분배하는 것을 컨슈머 리밸런싱이라고 부른다
- 컨슈머 그룹이 구독한 토픽의 파티션과 그룹 멤버들을 트래킹하는데 목적이 있다.
- 파티션과 그룹 멤버에 변화가 있으면 작업을 균등하게 재분배하기 위한 컨슈머 리밸런싱 동작이 실행된다.
- 그룹 코디네이터는 각 컨슈머 그룹별로 존재하며, 카프카 클러스터 내의 브로커 중 하나에 위치한다.
3) 파티션 할당 전략
컨슈머는 토픽의 어느 파티션에서부터 레코드를 잃어올 지 결정하는 파티션 할당 전략이 있다. 크게 4가지로 나뉜다.
3-1) 레인지 파티션 할당 전략
레인지 파티션 할당 전략은 기본적인 파티션 할당 전략으로, 각 토픽별로 할당 전략을 사용한다.
- 구독하는 토픽에 대한 파티션을 순서대로 나열하고 컨슈머를 순서대로 정렬한다.
- 컨슈머가 몇 개의 파티션을 할당해야할 지 전체 파티션 수를 컨슈머 수로 나눈다.
- 균등하게 나눠지지 않는 경우 앞쪽의 컨슈머들이 추가 파티션을 할당받는다.
이렇게 되면 컨슈머에 균등하게 파티션 부냅가 되지 않기 때문에 컨슈머 그룹은 불균형한 상태로 운영될 수 있다.
3-2) 라운드 로빈 파티션 할당 전략
- 파티션과 전체 컨슈머들을 나열한다.
- 나열된 파티션을 컨슈머들과 하나씩 라운드 로빈 방식으로 일대일로 매핑한다.
라운드 로빈 파티션 할당은 파티션과 컨슈머 매핑을 레인지보다 더 균등하게 할 수 있다.
3-3) 스티키 파티션 할당 전략
컨슈머 그룹의 리밸런싱 동작으로 파티션이 재활당되면 기존에 매핑되었던 파티션과 동일한 컨슈머가 매핑되는 것을 보장할 수 있다.
- 컨슈머들의 최대로 할당된 파티션 수 차이는 1
- 기존 존재하는 파티션 할당은 최대한 유지
- 재할당 동작에 유효하지 않는 모든 파티션 할당은 제거
- 할당되지 않은 파티션은 균형을 맞추는 방식으로 컨슈머에 할당
스티키 파티션은 재할당 작업이 발생해도 기존에 매핑됐던 파티션과 컨슈머를 최대한 유지하기 위해 사용하는 전략이다.
'DevOps > Kafka' 카테고리의 다른 글
Kafka Producer의 파티셔닝 동작 원리 및 전송 방식 (0) | 2022.11.20 |
---|---|
Local 테스트용 Kafka 브로커, 주키퍼 올리기 with Python (0) | 2022.11.18 |
Kafka 기본 개념 정리 (0) | 2022.11.18 |