ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kafka] Rebalancing (리밸런싱)
    📖 개발 공부/kafka 2023. 1. 31. 00:16

    리밸런싱 (Rebalancing)

    컨슈머 그룹 내의 컨슈머들은 자신들이 읽는 파티션의 소유권을 공유한다. 컨슈머 A가 담당하던 파티션 읽기 작업을 컨슈머 B가 이관받아 작업할 수 있음. 이를 리밸런싱이라고 한다.
    • 컨슈머 그룹 내의 컨슈머 인스턴스끼리 파티션을 적절히 분배하는 프로세스
    • 파티션 소유권 조정이 가능하기 때문에 컨슈머 그룹의 확장성과 가용성을 높여준다.
    • 리밸런싱이 발생하는 경우: 특정 토픽의 파티션 수 변화 || 컨슈머 그룹의 멤버십 변화 
    예시
    상황: 1개의 컨슈머 그룹(3개의 컨슈머 인스턴스), 토픽에 생성된 3개의 파티션
    ㄴ 컨슈머-1이 셧다운 되었을 때, 컨슈머-1에 할당되어 있던 파티션은 재할당 필요

    컨슈머 그룹 구성 정리하고, 파티션 재할당 작업을 진행 ⇒ 리밸런싱
    • 리밸런싱이 발생하면 컨슈머 그룹 내의 모든 컨슈머 읽기 작업이 중단된다.

    컨슈머 그룹 코디네이터 (Consumer GroupCoordinator)

    컨슈머 그룹별 브로커 하나 지정되는데, 이 브로커가 해당 컨슈머 그룹의 코디네이터가 된다.
    코디네이터는 브로커 중 한대로 지정된다. GroupCoordinator 인스턴스를 백그라운드 프로세스로 실행하면서 컨슈머 그룹을 관리하는 역할을 가진 카프카 브로커다.

     

    그룹 코디네이터는 다음과 같은 정보를 추적하고 관리한다. 다음 변화가 일어나면 리밸런싱을 실시한다.
    특정 토픽의 파티션 수 변화 || 컨슈머 그룹의 멤버십 변화

    • 컨슈머 그룹의 멤버십 변화 - 컨슈머 그룹 내의 컨슈머가 제외되거나 추가되었을 경우
      컨슈머 그룹의 컨슈머는 폴링(polling)하거나 커밋(commit)할 때 하트비트(Heartbeat) 메시지를 그룹 코디네이터에게 전달한다.
      • [컨슈머 제외] 그룹 코디네이터가 일정 기간(session.timeout.ms)동안 컨슈머의 하트비트를 받지 못하면, 해당 컨슈머는 작업이 불가한 것으로 판단
        → 리밸런싱 실시(다른 컨슈머로 파티션 소유권 이관)
      • [컨슈머 추가] 추가된 컨슈머는 그룹 코디네이터에게 JoinGroup 메세지를 전송한다.
        → 메세지를 전달받은 그룹 코디네이터는 해당 컨슈머를 포함해 리밸런싱 실시
    • 특정 토픽의 파티션 수 변화 - 컨슈머 그룹이 구독하고 있는 토픽의 파티션이 추가 혹은 변경(re-assign) 된 경우 (해당 파티션에 대한 소유권 재조정)

    컨슈머 그룹 리밸런싱 과정

    그룹 코디네이터는

    1. 컨슈머 그룹 내의 모든 컨슈머들의 파티션 소유권을 박탈시킨다.
    2. 컨슈머들의 JoinGroup 메세지를 기다린다.
    3. 가장 먼저 JoinGroup 을 요청한 컨슈머를 그룹 리더로 지정한 후, 해당 컨슈머(리더)에게 파티션 정보와 컨슈머 목록을 전달한다.
    4. 그룹 리더는
      전달받은 정보를 바탕으로 파티션 소유권을 재조정하고, 다시 그룹 코디네이터에게 전달한다.
    5. 그룹 코디네이터는
      재조정된 파티션 소유권을 각 컨슈머에게 알리고 리밸런싱을 종료한다.

    리밸런싱은 컨슈머의 소유권을 재조정하기 때문에 리밸런싱이 발생한 컨슈머 그룹 내의 모든 컨슈머의 읽기 작업은 중단된다.

    컨슈머의 일시적인 서비스 중단이 발생하므로 데이터 처리에 지연이 발생할 수 있다.

    → 리밸런싱은 컨슈머가 데이터를 처리하는 도중에 언제든지 발생할 수 있으므로 데이터 처리 중 발생한 리밸런싱에 대응하는 코드를 작성해야한다.

    728x90
    반응형

    '📖 개발 공부 > kafka' 카테고리의 다른 글

    [Kafka] Spring Kafka JSON Batch  (0) 2023.03.26
    [Kafka] Commit  (0) 2023.03.26
    [Kafka] reset offset  (0) 2023.02.25
    [Kafka] Partition 딥다이브  (0) 2023.01.18
    [Kafka] Kafka Architecture  (0) 2023.01.14

    댓글

Designed by Tistory.