JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

메시지를 어디까지 읽었는 지 기억하고, 그 다음 메시지부터 처리하기 (Consumer Group, Offset)

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
Kafka
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Kafka 입문
slug
consumer-group-and-offset
type
post
updatedAt
Dec 6, 2025 05:39 AM

✅ 메시지를 어디까지 읽었는 지 기억하고, 그 다음 메시지부터 처리하기

Kafka에서 컨슈머 그룹(Consumer Group)이라는 개념을 활용하면, 각 컨슈머 그룹(Consumer Group)이 어디까지 메시지를 읽었는지를 오프셋(offset)이라는 번호로 기록해둔다. 이 덕분에 컨슈머 그룹(Consumer Group)에 속해있는 컨슈머(Consumer)들은 안 읽은 메시지부터 순차적으로 메시지를 읽게 된다.
 
[용어 정리]
  • 컨슈머(Consumer) : 카프카의 메시지를 처리하는 주체
  • 컨슈머 그룹(Consumer Group) : 1개 이상의 컨슈머를 하나의 그룹으로 묶은 단위
  • 오프셋(offset) : 메시지의 순서를 나타내는 고유 번호 (0부터 시작)
 
그림으로 나타내면 다음과 같다.
 
notion image
  • 토픽에 저장되어 있는 여러 메시지는 메시지의 순서를 나타내는 고유 번호인 오프셋(offset)을 가지고 있다.
  • 오프셋(offset) 번호는 인덱스처럼 0부터 시작한다.
  • 컨슈머 그룹(Consumer Group)은 1개 이상의 컨슈머(Consumer)를 가질 수 있다.
  • 컨슈머 그룹(Consumer Group)은 어디까지 메시지를 읽었는 지에 대한 정보(CURRENT-OFFSET)를 알고 있다.
    • CURRENT-OFFSET : 다음에 읽을 메시지의 오프셋 번호
 
 
지금까지 배운 내용을 실습을 통해 바로 확인해보자.
 
 

✅ [실습] 컨슈머 그룹을 지정해서 메시지 읽기

  1. 컨슈머 그룹을 지정해서 메시지 읽기
    1. # 컨슈머 그룹을 활용해 메시지 조회하기 $ bin/kafka-console-consumer.sh \ --bootstrap-server localhost:9092 \ --topic email.send \ --from-beginning \ --group email-send-group
      notion image
      • --group email-send-group
        • : 기존에 email-send-group이라는 컨슈머 그룹이 없었다면 email-send-group이라는 컨슈머 그룹을 생성한다. 그리고 이 컨슈머 그룹으로 메시지를 읽을건데, 몇 번째 메시지까지 읽었는 지를 오프셋 번호로 저장해둔다.
      • --from-beginning (--group 옵션과 같이 사용했을 경우)
        • : 컨슈머 그룹의 오프셋 기록이 없으면 첫 메시지부터 읽고, 만약 오프셋 기록이 있으면 그 이후 오프셋부터 메시지를 읽는다.
       
  1. 컨슈머 그룹이 잘 생성됐는 지 확인하기
    1. # 컨슈머 그룹 전체 조회하기 $ bin/kafka-consumer-groups.sh \ --bootstrap-server localhost:9092 \ --list
      notion image
       
  1. 특정 컨슈머 그룹 세부 정보 조회하기
    1. # 컨슈머 그룹 세부 정보 조회하기 $ bin/kafka-consumer-groups.sh \ --bootstrap-server localhost:9092 \ --group email-send-group \ --describe
      notion image
      • CURRENT-OFFSET이 4로 되어 있는 걸 보니, email-send-group이라는 컨슈머 그룹이 오프셋이 0~3인 메시지(hello1, hello2, hello3, hello4)를 읽었고 다음으로 읽을 메시지의 오프셋이 4라는 걸 알 수 있다.
       
그림으로 나타내면 다음과 같다.
 
notion image
0~3까지의 오프셋 메시지를 읽고나서, 컨슈머 그룹의 CURRENT-OFFSET이 4로 바뀐 모습이다. 즉, 해당 컨슈머 그룹이 다음으로 읽을 메시지의 오프셋이 4라는 걸 뜻한다.
 
그럼 이번에는 컨슈머 그룹이 안 읽은 메시지부터 순차적으로 메시지를 읽는 지 확인해보자.
 
 

✅ [실습] 컨슈머 그룹이 안 읽은 메시지부터 순차적으로 메시지를 읽는 지 확인하기

  1. 토픽에 메시지 추가로 넣기
    1. # email.send라는 토픽에 메시지 넣기 $ bin/kafka-console-producer.sh \ --bootstrap-server localhost:9092 \ --topic email.send # 위 명령어 입력 후 넣을 메시지 내용 입력하고 Enter 누르기 hello5
       
  1. 이전에 사용했던 컨슈머 그룹으로 메시지 읽기
    1. 컨슈머 그룹이 정말 안 읽은 메시지부터 메시지를 읽어들이는 지 확인해보자.
      $ bin/kafka-console-consumer.sh \ --bootstrap-server localhost:9092 \ --topic email.send \ --group email-send-group \ --from-beginning
      notion image
      hello1 ~ hello4 메시지는 읽어들이지 않고, 방금 전에 추가한 hello5 메시지부터 읽어들였다.
       
  1. 컨슈머 그룹 세부 정보 조회하기
    1. # 컨슈머 그룹 세부 정보 조회하기 $ bin/kafka-consumer-groups.sh \ --bootstrap-server localhost:9092 \ --group email-send-group \ --describe
      notion image
      오프셋이 0~4인 메시지(총 5개의 메시지)까지 읽었으므로, CURRENT-OFFSET이 5로 표시되어 있다. 즉, 다음에 읽어야 할 메시지가 오프셋이 5인 메시지라는 뜻이다.
 
 
그림으로 나타내면 다음과 같다.
 
notion image
새로 들어온 오프셋이 4인 메시지(hello5)를 읽고나서, 컨슈머 그룹의 CURRENT-OFFSET이 5로 바뀐 모습이다. 즉, 해당 컨슈머 그룹이 다음으로 읽을 메시지의 오프셋이 5라는 걸 뜻한다.
 
 

✅ 정리

실제 서비스에서 똑같은 요청을 중복해서 여러번 처리하면 안 된다. 그래서 반드시 컨슈머 그룹(Consumer Group)을 활용해서 메시지를 읽어야 한다. 그래야 컨슈머 그룹이 메시지를 어디까지 읽었는 지 메시지의 오프셋(offset) 값으로 기억해뒀다가, 아직 처리하지 않은 그 다음 메시지부터 처리할 수 있게 된다.
 
author
JSCODE 박재성
category
Kafka
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Kafka 입문
slug
type
series-footer
updatedAt
Dec 6, 2025 05:39 AM
📎
이 글은 실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편) 강의의 수업 자료 중 일부입니다.