[Kafka] Consumer Group

sunny·2025년 3월 9일

컨슈머 그룹(Consumer Group)이란?

  • 카프카의 개별 컨슈머 인스턴스들을 하나로 묶는 논리적 그룹 단위
  • 하나의 토픽에 대해 여러 컨슈머 그룹이 동시 접속해 메시지를 가져올 수 있다.
    • 하나의 데이터를 다양한 용도로 사용하는 경우가 많아졌기 때문!
    • 예를 들어, 갱신 이벤트가 발생했을 때 해당 이벤트를 활용해야 하는 서비스가 여러 개인 경우!
    • (기존의 다른 메시지 큐 솔루션에서 메시지를 가져가면 큐에서 삭제되어 다른 컨슈머가 가져갈 수 없는 것과는 다른 방식!)
  • 컨슈머 그룹 안에서 컨슈머들은 메시지를 가져오고 있는 토픽의 파티션에 대해 소유권을 공유한다.

왜 컨슈머 그룹을 사용하는가?

  • 병렬 처리와 확장성

    • 보통 컨슈머와 파티션은 성능을 위해 1:1로 매핑을 한다. (이때 파티션이 더 많아지면 노는 컨슈머가 생기게 됨..! 각 파티션은 컨슈머 그룹 내의 한 컨슈머에게만 할당된다.)
    • 그래서 파티션과 함께 컨슈머를 늘리면 메시지 처리에 대한 병렬성(?)이 올라가게 된다.
    • 이러한 것을 관리 해주는 것이 컨슈머 그룹!
  • Fail Over

    • 특정 컨슈머에 문제가 생기는 경우, 동일 그룹 내의 다른 컨슈머가 계속해서 파티션에서 데이터를 읽을 수 있다
    • 컨슈머가 컨슈머 그룹 안에서 멤버로 유지하고 할당된 파티션의 소유권을 유지하는 방법은 하트비트를 보내는 것
      • 하트비트는 컨슈머가 poll 할 때와 가져간 메시지의 오프셋을 커밋할 때 보내게 된다. 만약 컨슈머가 오랫동안 하트비트를 보내지 않으면 세션은 타임 아웃되고 해당 컨슈머가 다운되었다고 판단하여 리벨런스가 시작된다.
  • Offset 관리

    • 컨슈머 그룹의 Topic의 각 파티션에서 소비한 메시지의 위치를 추적하고 관리한다. 이를 통해 각 컨슈머 그룹은 처리된 메시지의 상태를 유지하고, 중복 소비를 방지한다.

    • Offset이란, 파티션 내에서 데이터의 위치를 표시하는 숫자로 컨슈머는 자신이 어디까지 데이터를 가져갔는지를 offset을 이용하여 관리한다.

0개의 댓글