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를 통해 토픽 생성·메시지 발행·구독을 간단히 테스트할 수 있다.