Notice
Recent Posts
Recent Comments
Link
관리 메뉴

look-forest

Kafka 기본 개념 본문

Middleware/Kafka (메시지 브로커)

Kafka 기본 개념

studyHub 2026. 2. 13. 18:30

Kafka를 왜 배워야할까?

마이크로서비스 아키텍처와의 통합에 유리하기 때문이다.

최근에는 MSA를 도입하는 회사가 점점 많이 늘어나고 있는 추세다. 그런데 MSA의 방식으로 서비스를 운용할 때, Kafka의 여러가지 장점들 때문에 MSA에서 Kafka를 같이 도입해서 활용하는 추세다. 

Kafka는 마이크로서비스 아키텍처(MSA)에서 서비스 간의 비동기 통신 및 데이터 처리의 핵심 역할을 담당한다.


카프카(Kafka)란? 

Apache Kafka는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션에 사용되는
오픈소스 분산 이벤트 스트리밍 플랫폼이다.

 

간단히 말해, Kafka는 대규모 데이터를 처리할 수 있는 메시지 큐이다.

메시지 큐(Message Queue)란?

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

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

- 동기적 처리 ≒ 요청한 작업이 끝날 때까지 기다린다순차적으로 처리(A 작업이 다 끝난 이후에 B 작업을 처리)
  → Caller와 Callee의 작업의 완료 시점이 서로 맞춰져있기 때문에 동기(Synchronous)라는 표현을 쓴다.

- 비동기적 처리 ≒ 병렬적으로 처리(A 작업이 끝날 때까지 안 기다리고, A 작업을 시작한 직후에 B 작업도 바로 시작)

 

메시지 큐는 요청을 즉시 처리하지 않고 큐에 넣어 비동기적으로 처리함으로써 대규모 트래픽에도 안정적인 시스템 운영을 가능하게 한다. 이는 REST API의 동기 처리 방식과 대비되는 큰 장점이다.

‘REST API 방식으로 통신하는 방식’과 ‘메시지 큐를 활용한 통신 방식’ 비교

REST API 방식은 요청을 보낸 뒤에 모든 작업이 다 처리될 때까지 기다렸다가 응답을 받는 식으로 통신을 한다.

이메일 서버에서 관련 로직을 전부 실행하고 응답한다.

 

 

메시지 큐 활용 통신 방식은 비동기적으로 작업을 처리하므로 모든 작업이 다 처리되는 것과 상관없이 응답을 받을 수 있다.

메시지 큐 시스템에서는 데이터를 생성하여 큐에 보내는 역할을 '프로듀서'가, 큐에서 데이터를 가져와 처리하는 역할을 '컨슈머'가 담당한다. 이 둘은 비동기 통신의 핵심 구성 요소이다.

Producer: 메시지를 생산하는 주체 Consumer: 메시지를 소비하는 주체 메시지 큐: 처리해야 할 메시지를 보관하는 임시 저장소

 

  1. 사용자가 REST API 방식으로 요청
  2. 요청받은 서버는 Producer 로서 메시지를 만들어 메시지 큐에 전달
    - 메시지 안에는 처리해야 할 요청에 대한 정보가 담겨있다.
  3. Producer 서버는 메시지 큐에 메시지를 넣자마자 사용자에게 성공 응답(비동기 방식으로 처리)
  4. 메시지 큐는 Producer로 부터 받은 메시지(요청)을 보관
  5. Consumer 서버가 메시지 큐에 들어있는 메시지(요청)을 꺼내서 실제 작업을 수행(ex. 이메일 발송 로직 처리) 

AWS EC2에 Kafka 설치/실행하기

1. JDK 17 이상 설치

Kafka를 실행시키려면 JDK 17 이상이 설치되어 있어야 한다.

 

2. Kafka 설치 파일 다운

$ wget https://dlcdn.apache.org/kafka/4.0.0/kafka_2.13-4.0.0.tgz

$ tar -xzf kafka_2.13-4.0.0.tgz # 압축 풀기
$ cd kafka_2.13-4.0.0

 

3. Kafka 실행 메모리 크기 낮추고 swap 설정 (필요시)

시스템 부팅 시마다 자동으로 활성화 되도록 파일시스템 수정

 

4. Kafka 설정 수정

클라이언트가 외부에서 접근할 때 사용하는 IP 주소로 고쳐야 한다. 그래서 EC2의 Public IP 주소로 변경해주었다.

$ vi config/server.properties

# 외부에서 접근할 때 사용하는 주소
advertised.listeners=PLAINTEXT://{EC2 Public IP}:9092,CONTROLLER://{EC2 Public IP}:9093

 

5. Kafka 서버 시작하기

kafka는 bin 디렉토리 하위의 shell 스크립트로 명령을 실행한다.

# 초기 로그 폴더 셋팅 (카프카 첫 실행 때만 이 명령어를 입력하면 됨)
$ KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
$ bin/kafka-storage.sh format --standalone -t $KAFKA_CLUSTER_ID -c config/server.properties

# 카프카 서버 실행
$ cd ~/kafka_2.13-4.0.0
$ bin/kafka-server-start.sh config/server.properties # 포그라운드에서 실행

# 백그라운드에서 실행
$ bin/kafka-server-start.sh -daemon config/server.properties 

# 백그라운드에서 실행되고 있는 kafka 서버의 로그 확인하기
$ tail -f logs/kafkaServer.out 

# 실행 중인지 확인
$ sudo lsof -i:9092

# 카프카 종료하기
$ bin/kafka-server-stop.sh

 


참고 자료 & 이미지 출처
실전에서 바로 써먹는 kafka 입문