BackEnd/Kafka

Kafka란?

연향동큰손 2025. 8. 12. 23:20

 

메세지 지향 미들웨어(MOM)

 

메시지 지향 미들웨어란 응용 소프트웨어 간의 비동기적 데이터 통신을 위한 소프트웨어이다.

 

메시지 지향 미들웨어는 메시지를 전달하는 과정에서 보관하거나 라우팅 및 변환을 할 수 있다는 장점을 가진다.

 

 

메시지 큐(Message Queue)

 

메시지 큐(Message Queue)란 큐(Queue) 형태에 데이터를 일시적으로 저장하는 임시 저장소를 의미한다.

 

메시지 큐를 활용하면 비동기적(Asynchronous)으로 데이터를 처리할 수 있어서 효율적이다.

 

여기서 비동기적으로 데이터를 처리한다는 것의 의미는 A와 B라는 작업을 수행할때 A작업을 시작한 직후에 B작업도 바로 시작하는것을 의미한다.

반면 동기적 처리(Synchronous)는 A작업이 다 끝날 때 까지 기다리고 B를 처리하는 방식을 말한다.

 

 

REST API 방식의 통신과 메시지 큐를 활용한 통신을 비교해보자.

 

REST API 통신

 

REST API 통신은 요청을 보내면 서버에서 모든 작업을 수행 할 때까지 기다린 후 응답을 사용자에게 보낸다.

 

Message Queue

메시지 큐의 경우 동기적 처리를 하는 REST API 통신 방식과 다른데, 과정은 다음과 같다.

 

  1. 사용자가 REST API 방식으로 요청을 보낸다.
  2. 요청을 받은 서버는 메시지 큐에 전달할 메시지를 만들어 전달 (이 서버를 Producer라고 한다.)
  3. Producer 서버는 메시지 큐에 메시지를 넣자마자 사용자에게 성공 응답을 보낸다.(비동기 방식 처리)
  4. 메시지 큐에 메시지(요청)를 보관.
  5. Consumer 서버가 메시지 큐에 들어있는 메시지(요청)를 꺼내서 실제 작업(메시지를 꺼내서 처리하는 서버를 Consumer서버라 한다.)

 

Kafka란?

 

Kafka(카프카)는 대규모 데이터를 처리할 수 있는 메시지 큐이다.

 

Kafka는 기본적으로 Topic, Consumer, Producer로 구성되어있다.

 

Producer

  • Kafka에 메시지를 전달하는 주체이다.
  • 원하는 Topic에 메시지를 전송한다.

 

Consumer

  • Kafka의 메시지를 처리하는 주체이다.
  • 구독(Subscribe)한 Topic의 데이터를 처리한다.

 

Topic

  • Kafka에 넣을 메시지의 종류를 구분하는 개념이다.

 

Topic 생성, 조회

 

<Topic 생성>

bin/kafka-topics.sh --bootstrap-server <kakfa 주소> --create --topic <토픽명>

 

<Topic 조회>

bin/kafka-topics.sh --bootstrap-server <kakfa 주소> --list

 

<Topic 삭제>

 bin/kafka-topics.sh --bootstrap-server <kafka 주소> --delete --topic <토픽명>

 

위 명령어를 사용하여 Topic 생성, 조회, 삭제까지 해봤다.

 

메시지 넣기, 메시지 조회

 

<메시지 넣기>

# email.send라는 토픽에 메시지 넣기
$ bin/kafka-console-producer.sh \
--bootstrap-server localhost:9092 \
--topic email.send

 

위 명령어를 사용하면 메시지 내용을 입력할 수 있는 칸이 나오고 원하는 값을 입력하고 Enter를 누르면 된다.(종료 : Ctrl + c)

 

메시지 생성을 할때 Consumer에서 메시지를 조회하게 되면 실시간으로 Consumer에서 메시지 조회가 가능하다.

# email.send라는 토픽에 있는 메시지 꺼내기
$ bin/kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic email.send \
--from-beginning

 

 

Kafka Offset

 

Kafka는 컨슈머 그룹(Consumer Group)이라는 개념을 활용하여 각 컨슈머 그룹이 어디까지 메시지를 읽었는지 Offset이라는 번호로 기록한다.

  • Offset은 메시지의 순서를 나타내는 고유 번호
  • Offset은 0부터 시작
  • Topic에 저장된 메시지는 고유 번호인 Offset을 가지고 있다.
  • Consumer Group은 1개 이상의 Consumer를 가질 수 있다.
  • Consumer Group에서 메시지를 어디까지 읽었는 지에 대한 정보(CURRENT-OFFSET)를 저장하고 있다.

 

# 컨슈머 그룹 세부 정보 조회하기
$ bin/kafka-consumer-groups.sh \
--bootstrap-server localhost:9092 \
--group email-send-group \
--describe

 

위 명령어를 통해 Consumer Group의 세부 정보를 조회하면 OFFSET 정보를 확인 가능한데,

 

아래 사진에서 CURRENT-OFFSET이 5로 되어있다는 것은 0~4까지의 메시지를 읽었고, 다음으로 읽을 메시지의 OFFSET이 5라는 의미이다. 

 

아래 명령어를 통해 실제로 CURRENT-OFFSET 부터 메시지를 읽는 것을 확인 가능하다.

bin/kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic email.send \
--group email-send-group \
--from-beginning

 

'BackEnd > Kafka' 카테고리의 다른 글

[Kafka] Kafka 메시지 처리 성능 향상 (Partition)  (0) 2025.08.15
[Kafka] Dead Letter Topic  (2) 2025.08.14
Spring Boot + Kafka 메시지 테스트  (2) 2025.08.14