성장일기

내가 보려고 정리하는 공부기록

인프라/Kafka

[Kafka] 3. kafka의 기본 구성 알아보기 (Topic, Consumer, Producer) - CLI 실습

와나나나 2025. 10. 13. 19:50
728x90

지난 게시글에 이어 kafka의 기본 구성에 대해 알아보려고 한다. 강의 속 이미지들과 내용은 아래 강의를 참고했다!

https://www.youtube.com/playlist?list=PLtUgHNmvcs6p3304vUg6ywvUIAIe5K4WP

 

[인프런] 실전에서 바로 써먹는 Kafka 입문

풀버전 강의는 아래 링크를 참고해주세요😊 ✔️ https://inf.run/Qxpw1

www.youtube.com

 

 


☑️ Kafka의 기본 구성

  • 프로듀서 (Producer) : 카프카에 메시지(데이터)를 전달하는 주체
    • 받은 메시지를 토픽 별로 구분해서 메시지큐에 전달
  • 컨슈머 (Consumer) : 카프카에 메시지(데이터)를 처리하는 주체
    • 새로운 메시지를 주기적으로 체크해서 새로운 메시지가 있으면 그 메시지를 조회해서 처리
  • 토픽 (Topic) : 카프카에 넣을 메시지의 종류를 구분하는 개념 (카테고리)

 

 

 

 ☑️ 토픽 생성하기 / 조회하기 / 삭제하기

스프링을 통해서 kafka를 조작할 수 있지만, CLI를 활용해서도 kafka를 조작할 수 있다.

 

 

토픽 생성하기

이 명령어들은 kafka가 설치된 디렉터리 내부에서 해주어야 한다! 또 kafka가 실행중이어야 한다.

bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic [토픽이름]
# bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic email.send

 

 

토픽 조회하기

토픽 전체 조회

bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

 

토픽 세부조회

bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic [토픽이름]
# bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic email.send

 

 

토픽 삭제하기

bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic [토픽이름]
# bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic email.send

 

 

 

☑️ Kafka에 메시지 넣고 조회하기

 

 

메시지 넣기

위에서 만든 토픽에 메시지를 넣어보자! 메시지의 형태는 key-value로 들어가거나, key만 생략하고 value를 넣는 방식이 있다. 강의 실습에서는 후자의 방식으로 진행했다.

 

bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic [토픽이름]

 

위 명령어를 작성하면 내용을 쓸 수 있게 뜨는데, 거기에 토픽에 넣을 메시지를 넣어주면 된다. 그냥 아래처럼 넣었다.

 

 

메시지 조회하기

위에서 넣은 메시지를 조회하기 위해 아래 명령어를 작성하면 된다. --from-beginning은 처음부터 다 가져오게 하는 옵션이다.

bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic [토픽이름] --from-beginning

 

 

EC2를 2개 열어서 메시지를 넣고 조회하는게 동시에 이루어지도록 할 수도 있다.

그런데 현재 배운 것으로는 계속 처음부터 모든 메시지를 조회하기 때문에, 중복으로 처리가 될 가능성이 매우 높다. 실제 프로젝트에서 쓰기 위해서는 메시지를 어디까지 읽었는지 기억하고, 그 다음 메시지부터 처리하는 게 필요할 것이다!

 

 

 

☑️ 마지막으로 읽은 메시지 위치 기억하고 그 뒤부터 처리하기 (Consumer group, offset)

 Consumer Group을 활용하면 각 컨슈머 그룹이 어디까지 메시지를 읽었는지 오프셋(offset)이라는 번호로 기록해둔다. 이 덕에 안 읽은 메시지부터 순차적으로 메시지를 읽게 된다.

- 컨슈머 : kafka의 메시지를 처리하는 주체
- 컨슈머 그룹 (Consumer Group) : 1개 이상의 컨슈머를 하나의 그룹으로 묶은 단위
- 오프셋(offset) : 메시지의 순서를 나타내는 고유 번호 (0부터 시작)

 

 

 

  • 토픽에 저장되어있는 여러 메시지는 메시지의 순서를 나타내는 고유번호인 offset을 가진다
  • offset 번호는 0부터 시작
  • 컨슈머 그룹은 1개 이상의 컨슈머를 가질 수 있음
  • 컨슈머 그룹은 어디까지 메시지를 읽었는지에 대한 정보를 알고 있음 (CURRENT-OFFSET)
    • 그래서 안 읽은 메시지부터 읽어나갈 수 있는 거!

 

아래 명령어를 통해 그룹을 설정할 수 있다. 그룹 이름이 같은 그룹이 없으면 새로 생성한다! 생성한 이후로 offset을 저장해두기 시작한다. --from-beginning과 --group을 같이 쓰면, 저장된 offset이 없을 땐 처음부터 저장하고 있으면 저장된 offset부터 읽기 시작한다. 

 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic [토픽이름] --from-beginning --group [그룹이름]
 #  bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic email.send --from-beginning --group email-send-group

 

 

 

아래처럼 그룹에 대한 세부 정보 조회도 가능하다.

 

 


다음 강의부터는 Springboot에 연결한다!