카프카 컨슈머 그룹 리밸런싱이 무엇인지 알아보자
하나의 토픽에 다른 컨슈머 그룹을 추가해야 하는 상황을 맞이 했는데, 혹시나 기존의 컨슈머나 토픽에 영향을 줄까 싶어 살펴보다가 카프카 리밸런싱이라는 개념을 발견하게 되었다. 이번 글에서는 카프카 리밸런싱이 무엇이고, 왜 일어나는 것인지 기존 시스템에 어떤 영향을 미치는 지 알아보자.
컨슈머 그룹이란?
컨슈머 그룹은 특정한 하나의 목적을 가진 컨슈머를 논리적인 그룹으로 묶는 단위이다. 기본적으로 모든 컨슈머는 특정 컨슈머 그룹에 속해있다. 1개든 2개든 N개든 컨슈머는 무조건 특정 목적을 가진 컨슈머 그룹으로 묶여있다. 그러면 컨슈머 그룹은 왜 사용할까?
컨슈머 그룹 왜 사용하는가?
컨슈머 그룹은 크게 두가지 이유로 사용한다.
- Fault Tolerance (장애 내성)
- Offset 관리
첫번째는 Fault Tolerance이다. 컨슈머 그룹이 있다면 특정 컨슈머에 문제가 생기는 경우 동일 그룹 내의 다른 컨슈머가 작업을 이어서 할 수가 있다.
두번째는 offset 관리이다. 토픽은 파티션별로 오프셋을 가지고 있다. 오프셋은 파티션 별로 가지고 있는 데이터의 번호이다. 즉 이를 통해 컨슈머는 자신이 어디까지 데이터를 가져갔는지 관리한다. 그리고 카프카는 이러한 오프셋을 컨슈머 그룹 단위로 관리한다.
![](https://blog.kakaocdn.net/dn/4vdeH/btsBG5ldXuh/v3Tioct9a3YE49igVm5YE0/img.png)
지금 하고 있는 프로젝트에서는 클라이언트 이벤트 로그를 이벤트 토픽에 적재하고 이를 각각 Bigquery와 PA툴에 적재해야 했다. 이를 위해 이벤트 토픽에 대해 Bigquery 컨슈머 그룹과 PA 컨슈머 그룹을 각각 만들어 독립적으로 토픽 데이터를 수신하도록 하였다.
컨슈머와 파티션
기본적으로 파티션과 컨슈머는 1:1 매칭이다 (물론 하나의 컨슈머가 여러개의 파티션과 대응될 수도 있다). 그렇다보니 컨슈머는 각자가 구독하고 있는 파티션이 있다. 이 부분이 바로 리밸런싱을 일으키는 중요한 요소이다.
리밸런싱이란?
위에서 알아봤듯이 컨슈머는 기본적으로 컨슈머 그룹에 속해 컨슈밍을 하고 컨슈머는 각자가 배정받은 파티션이 있다. 리밸런싱은 이러한 컨슈머의 특징 때문에 생기는 문제이다.
리밸런싱이란, 특정 컨슈머에 문제가 생겨 메세지를 처리할 수 없다면 파티션의 소유권을 다른 컨슈머에게 이관하는 조정 작업을 말한다. 이러한 과정을 통해 카프카는 확장성과 가용성을 최대한 높여 최신 상황에 맞춰 데이터를 처리할 수 있다. 하지만 아무래도 리밸런싱이 일어나면 컨슈머끼리 다시 파티션 소유권을 정하는 시간 때문에 일시적으로 메시지가 처리되지 않는 문제가 발생할 수 있어 최대한 이러한 일이 일어나지 않게 하는 것이 좋다.
리밸런싱은 아래와 같은 경우에 일어나게 된다.
- 컨슈머 생성 / 삭제
- max.poll.interval.ms 초과
- 컨슈머가 polling하고 commit 할때까지의 대기시간.
- 컨슈머가 polling하고 commit 할때까지의 대기시간.
- 컨슈머 장애
리밸런싱을 막기 위해서는?
- max.poll.records 줄이기
- 리밸런싱 시간 단축
- poll 시간 지연 예방으로 리밸런싱 발생 가능성 감소
- 중복 컨슈밍 가능성 감소
- 수동 커밋 사용
참조
카프카 컨슈머 그룹 리밸런싱 (Kafka Consumer Group Rebalancing)
안녕하세요. 결제정산개발팀 Jim 입니다.
techblog.gccompany.co.kr
'데이터 엔지니어링 > Kafka' 카테고리의 다른 글
카프카 스키마 레지스트리 핵심 컨셉 알아보기 (0) | 2023.10.12 |
---|---|
쿠버네티스에서 카프카(kafka on k8s) 정말 좋은 선택일까? (0) | 2023.09.11 |