-
[개념] Kafka 리밸런싱STOVE DEVCAMP 3기/알림 서비스 2023. 3. 10. 03:17
## 컨슈머 그룹
- 카프카 프로듀서가 전송한 메시지는 토픽의 파티션에 나눠서 저장됨
- 파티션에 저장된 메시지들은 컨슈머들에 의해 읽혀짐
- 하나 이상의 카프카 컨슈머들은 '컨슈머 그룹'을 형성함
## 카프카 리밸런싱
상황
- 프로듀서에서 생산하는 메시지를 하나의 컨슈머가 모두 처리하는 구조
- 컨슈머 쪽이 병목이 되어 카프카 파티션에 처리되지 않은 메시지가 쌓일 수 있음
- 이러한 지연은 데이터 파이프라인의 실시간성을 떨어뜨리고 결국 장애를 발생시킬 수 있음
개선
- 위와 같은 문제를 해결하기 위해 데이터 읽어가는 컨슈머 쪽의 스케일 아웃이 필요함
- 즉, 컨슈머 그룹의 컨슈머를 추가하여 데이터 처리량을 늘리는 작업임
- 컨슈머 그룹에 컨슈머가 추가되면, 컨슈머 그룹에 속한 컨슈머들이 토픽의 파티션들의 소유권을 나눠가지게 됨
- 이러한 과정이 '리밸런싱' 임
동작 과정
- 컨슈머 그룹은 그룹 코디네이터(Group Cordinator)라고 하는 카프카 브로커 서버를 하나 할당받음
- 컨슈머 그룹의 컨슈머들은 정상 동작함을 보장하기 위해 그룹 코디네이터에게 heartbeat를 전송함
- 이때, 컨슈머가 일정 기간동안 heartbeat를 전송하지 않는다면, 그룹 코디네이터는 리밸런싱을 수행함
- 리밸런싱이 시작되면,
- 그룹 코디네이터는 컨슈머 그룹 리더에게 살아있는 컨슈머 목록을 전달하고,
- 컨슈머 그룹 리더는 이 목록을 이용해 Partition Assignor 클래스를 이용해 파티션 소유권 분배를 수행함
- 컨슈머 그룹 리더는 컨슈머 그룹에 속한 컨슈머 중 최초로 접속한 컨슈머가 담당함
- 소유권 분배 정보가 결정되면 분배 결과를 그룹 코디너에게 전송하고, 그룹 코디네이터는 이 분배 정보를 각 컨슈머에게 전달함
- 결과적으로, 컨슈머는 자신에게 할당된 파티션 정보만 알 수 있음
## 참고
https://always-kimkim.tistory.com/entry/kafka101-consumer-rebalance
'STOVE DEVCAMP 3기 > 알림 서비스' 카테고리의 다른 글
[알림 서비스] 클린 아키텍처 (0) 2023.03.10 [개념] Kafka 컨슈머 (0) 2023.03.10 [알림 서비스] 알림 서비스 구조 개선 방향 수립 (0) 2023.03.10 [알림 서비스] 알림 서비스 구조 개선 - 대량의 알림 데이터 처리를 위한 장기적 관점의 확장 가능한 구조 설계 (0) 2023.03.10 [알림 서비스] 알림 서비스 구조 개선 - 알림 전송 외부 라이브러리 의존성 분리 리팩토링 (0) 2023.03.10