SK플래닛 ai활용 데이터엔지니어 과정 2기/Airflow

Kafka 개념 정리 + CLI 테스트

dev-lee 2026. 4. 23. 21:20

Kafka란

데이터를 흘려 보내는 이벤트 파이프라인임. 프로듀서(이벤트 발송)와 컨슈머(이벤트 수신) 구조로 동작함.

예시: 고객이 배민앱에서 주문(이벤트 발생) → 매장에 알림(이벤트 수신) → 점주가 주문 수락(이벤트 처리)

  • MSA 아키텍처에서 서로 떨어진 서비스 간 비동기 통신에 활용됨
  • 공급자(Producer)와 구독자(Consumer) 포지션으로 구성됨
  • 시간 지연 없이, 용량 제한 없이 전송 가능
  • docker-compose.yaml로 간단하게 구성 가능

핵심 구성 요소

구성  역할  설명
Producer 발송인 데이터를 생산하고 Consumer에게 전송하는 주체. 실시간 데이터 전송/수집/처리 담당
Consumer 수취인 Kafka의 데이터를 받아 소비하는 주체. Kafka 앞에 구성되거나 생략·내장될 수 있음
Event (Message) 메시지 주로 JSON 형태로 전달되는 데이터 단위
Topic 주제 데이터를 분류하는 기준. OpenSearch의 인덱스에 대응되는 개념

기타 구성 요소

구성  설명
Broker Kafka 서버. 데이터를 임시 보관하며 Docker 컨테이너로 구성함. AWS MSK로 대체 가능
Partition 토픽을 병렬 처리하기 위해 여러 개로 분할하는 단위
Offset Consumer가 어디까지 읽었는지 추적하는 위치값 (내부 관리)
Consumer Group 하나의 토픽을 여러 Consumer가 분담 처리할 때 지정하는 그룹

유사 서비스 비교

관점  비교 대상
메시징 RabbitMQ
데이터 스트리밍 AWS Kinesis

CLI 모드 테스트

Docker 기반 Kafka 컨테이너에 접속하여 토픽 생성 → 프로듀서 전송 → 컨슈머 수신을 CLI로 테스트한 과정임.

1. Kafka 컨테이너 접속

# 호스트 PC에서 Kafka 컨테이너로 접속
PS ~\kafka-local> docker container exec -it kafka bash

# 컨테이너 내부에서 Kafka 바이너리 디렉토리로 이동
root@4527e52ba5f6:/# cd /opt/kafka/bin
  • docker container exec -it kafka bash : 실행 중인 kafka 컨테이너에 대화형 셸로 접속
  • /opt/kafka/bin : Kafka CLI 도구들(kafka-topics.sh, kafka-console-producer.sh 등)이 위치한 경로

2. 토픽 생성

kafka-topics.sh --create --topic spacex \
  --bootstrap-server 127.0.0.1:9092 \
  --partitions 1 \
  --replication-factor 1
옵션  설명
--create 새 토픽 생성 명령
--topic spacex 토픽 이름을 spacex로 지정
--bootstrap-server 127.0.0.1:9092 Kafka 브로커 주소. 컨테이너 내부이므로 localhost:9092
--partitions 1 파티션 1개로 구성 (병렬 처리 단위)
--replication-factor 1 복제본 1개 (단일 브로커 환경이므로 1)

3. 프로듀서 - 메시지 전송

kafka-console-producer.sh --topic spacex --bootstrap-server 127.0.0.1:9092
  • 실행하면 입력 대기 상태가 됨
  • 키보드로 메시지를 입력하면 해당 토픽으로 전송됨
  • 프로듀서 역할: 데이터를 생산하여 spacex 토픽에 발행

4. 컨슈머 - 메시지 수신

kafka-console-consumer.sh --topic spacex --bootstrap-server 127.0.0.1:9092
  • spacex 토픽을 구독하여 실시간으로 메시지를 수신함
  • 프로듀서가 보낸 메시지가 이 터미널에 즉시 출력됨
  • 별도 터미널에서 프로듀서와 컨슈머를 동시에 실행하여 실시간 통신을 확인할 수 있음

테스트 흐름 요약

[터미널 1] Kafka 컨테이너 접속
    → 토픽 생성 (spacex, partition=1, replica=1)
    → kafka-console-producer.sh 실행 → 메시지 입력

[터미널 2] Kafka 컨테이너 접속
    → kafka-console-consumer.sh 실행 → 메시지 수신 확인

Kafka는 Producer-Consumer 구조의 이벤트 파이프라인으로, MSA 환경에서 서비스 간 비동기 통신을 담당하며, CLI를 통해 토픽 생성·메시지 발행·구독을 간단히 테스트할 수 있다.