Oh My Algorithm
Concept Guide파티션 배정 · 병렬 소비

컨슈머 그룹 (Consumer Group)

컨슈머 그룹은 여러 컨슈머가 한 토픽을 나눠 읽는 단위입니다. 파티션 하나는 그룹 안에서 정확히 컨슈머 하나에게만 배정되므로, 컨슈머를 늘리면 처리량이 올라가지만 파티션 수를 넘어서면 남는 컨슈머는 놀게 됩니다. 각 컨슈머는 자기가 맡은 파티션의 오프셋을 커밋하고, 그룹이 다르면 같은 데이터를 서로 독립적으로 읽습니다.

01컨슈머 그룹 (Consumer Group)

① 누가 읽나 · 파티션 배정

줄 세 개에 이벤트가 쌓여 있습니다. 이걸 누가 읽을지부터 정해야 합니다.

읽는 프로그램 하나로 시작하면 줄 셋을 혼자 다 맡습니다. 동작은 하지만 속도가 이 하나에 묶입니다.

같은 그룹에 둘째를 넣으면 배정이 다시 계산됩니다. 1번 줄이 consumer-2 에게 넘어가 둘이 나눠 읽습니다.

셋째까지 넣으면 줄 하나에 하나씩, 1:1이 됩니다. 이 토픽에서 낼 수 있는 최대 속도입니다.

넷째를 넣으면 어떻게 될까요? 줄 하나는 그룹 안에서 한 명에게만 배정되므로, consumer-4 는 맡을 줄이 없어 놉니다.

P0ABCDP1ABCDP2ABCD
1 / 5

정리

줄 개수가 이 그룹의 속도 상한입니다. 읽는 쪽을 늘려 더 빠르게 하려면 줄부터 늘려야 합니다.

② 어디까지 읽었나 · 오프셋 커밋

1:1로 배정된 상태에서 시작합니다. 셋 다 아직 아무것도 읽지 않아 ▲ 가 맨 앞에 있습니다.

각자 자기 줄을 앞에서부터 읽어 나갑니다. ▲ 는 '다음에 읽을 자리'라 처리할수록 오른쪽으로 밀립니다.

처리한 지점을 카프카에 기록해 둡니다(오프셋 커밋). 껐다 켜도 이 자리에서 이어 읽습니다.

consumer-2 가 죽었습니다. 1번 줄이 주인을 잃었으니 남은 컨슈머에게 넘어갑니다(리밸런싱).

새 주인은 커밋된 자리부터 이어 읽습니다. ▲ 가 그대로라 이벤트를 잃지도, 두 번 읽지도 않습니다.

P0ABCDconsumer-1P1ABCDconsumer-2P2ABCDconsumer-3▲ A▲ A▲ A
1 / 5

정리

다만 재배정이 끝날 때까지 읽기가 잠깐 멈춥니다. 컨슈머가 자주 들락거리면 그만큼 지연이 쌓입니다.

③ 다른 팀이 또 읽으면 · 그룹 독립

지금까지가 주문 처리 팀(그룹 A)입니다. 각자 여기까지 읽었습니다.

이제 분석 팀(그룹 B)이 같은 기록을 보고 싶어 합니다. 그룹 이름이 다르면 완전히 별개로 취급됩니다.

B 는 자기 ▲ 를 따로 갖고 맨 앞부터 다시 읽습니다. A 의 진도는 조금도 움직이지 않습니다.

P0ABCDconsumer-1P1ABCDconsumer-2P2ABCDconsumer-3▲ A▲ A▲ A
1 / 3

정리

한 그룹 안에서는 줄을 나눠 맡아 빨라지고, 그룹끼리는 같은 기록을 각자 읽어 서로 방해하지 않습니다.

02 쉽게 이해하기

For Everyone
🔑핵심 동작

한 그룹 안에서 파티션 하나는 컨슈머 한 명에게만 배정됩니다. 그래서 파티션 수가 그 그룹의 병렬성 상한이고, 그룹이 다르면 같은 로그를 각자의 오프셋으로 따로 읽습니다.

💡쉽게 말하면

그룹 안에서 파티션은 컨슈머에게 배타적으로 배정됩니다.

그래서 파티션 수가 그룹의 병렬성 상한이 됩니다.

각 컨슈머는 처리한 위치를 오프셋으로 커밋해 두고, 다시 시작하면 그 지점부터 이어 읽습니다.

컨슈머가 들어오거나 빠지면 리밸런싱이 일어나 배정이 다시 계산되는데, 그동안 소비가 잠깐 멈춥니다.

그룹 ID가 다르면 서로 간섭하지 않고 같은 로그를 각자의 오프셋으로 읽습니다.

📍어디에 쓰나
  • 컨슈머 수와 파티션 수 맞추기
  • 처리량 스케일아웃 설계
  • 오프셋 커밋 전략(at-least-once vs at-most-once)
  • 같은 데이터를 여러 용도로 소비하기

03 자주 묻는 질문

FAQ
컨슈머 그룹 (Consumer Group)란 무엇인가요?+

컨슈머 그룹은 여러 컨슈머가 한 토픽을 나눠 읽는 단위입니다. 파티션 하나는 그룹 안에서 정확히 컨슈머 하나에게만 배정되므로, 컨슈머를 늘리면 처리량이 올라가지만 파티션 수를 넘어서면 남는 컨슈머는 놀게 됩니다. 각 컨슈머는 자기가 맡은 파티션의 오프셋을 커밋하고, 그룹이 다르면 같은 데이터를 서로 독립적으로 읽습니다.

컨슈머 그룹 (Consumer Group)은(는) 어디에 사용하나요?+

컨슈머 수와 파티션 수 맞추기, 처리량 스케일아웃 설계, 오프셋 커밋 전략(at-least-once vs at-most-once), 같은 데이터를 여러 용도로 소비하기

컨슈머 그룹 (Consumer Group)를 쉽게 비유하면?+

한 그룹 안에서 파티션 하나는 컨슈머 한 명에게만 배정됩니다. 그래서 파티션 수가 그 그룹의 병렬성 상한이고, 그룹이 다르면 같은 로그를 각자의 오프셋으로 따로 읽습니다.