STOVE DEVCAMP 3기/알림 서비스

[개념] Kafka 리밸런싱

sw_develop 2023. 3. 10. 03:17

## 컨슈머 그룹

  • 카프카 프로듀서가 전송한 메시지는 토픽의 파티션에 나눠서 저장됨
  • 파티션에 저장된 메시지들은 컨슈머들에 의해 읽혀짐
  • 하나 이상의 카프카 컨슈머들은 '컨슈머 그룹'을 형성함

 

## 카프카 리밸런싱

상황

  • 프로듀서에서 생산하는 메시지를 하나의 컨슈머가 모두 처리하는 구조
  • 컨슈머 쪽이 병목이 되어 카프카 파티션에 처리되지 않은 메시지가 쌓일 수 있음
  • 이러한 지연은 데이터 파이프라인의 실시간성을 떨어뜨리고 결국 장애를 발생시킬 수 있음

개선

  • 위와 같은 문제를 해결하기 위해 데이터 읽어가는 컨슈머 쪽의 스케일 아웃이 필요함
  • 즉, 컨슈머 그룹의 컨슈머를 추가하여 데이터 처리량을 늘리는 작업임
  • 컨슈머 그룹에 컨슈머가 추가되면, 컨슈머 그룹에 속한 컨슈머들이 토픽의 파티션들의 소유권을 나눠가지게 됨
    • 이러한 과정이 '리밸런싱' 임

동작 과정

  • 컨슈머 그룹은 그룹 코디네이터(Group Cordinator)라고 하는 카프카 브로커 서버를 하나 할당받음
  • 컨슈머 그룹의 컨슈머들은 정상 동작함을 보장하기 위해 그룹 코디네이터에게 heartbeat를 전송함
  • 이때, 컨슈머가 일정 기간동안 heartbeat를 전송하지 않는다면, 그룹 코디네이터는 리밸런싱을 수행함
  • 리밸런싱이 시작되면,
    • 그룹 코디네이터는 컨슈머 그룹 리더에게 살아있는 컨슈머 목록을 전달하고,
    • 컨슈머 그룹 리더는 이 목록을 이용해 Partition Assignor 클래스를 이용해 파티션 소유권 분배를 수행함
    • 컨슈머 그룹 리더는 컨슈머 그룹에 속한 컨슈머 중 최초로 접속한 컨슈머가 담당함
    • 소유권 분배 정보가 결정되면 분배 결과를 그룹 코디너에게 전송하고, 그룹 코디네이터는 이 분배 정보를 각 컨슈머에게 전달함
      • 결과적으로, 컨슈머는 자신에게 할당된 파티션 정보만 알 수 있음

 

## 참고

https://always-kimkim.tistory.com/entry/kafka101-consumer-rebalance