메시지큐란. 프로세스/서비스 간에 비동기적으로 메시지를 주고받을 수 있게 하는 미들웨어
프로듀서 -> 큐 -> 컨슈머 구조로, 메시지는 순차적으로 순차되며, 먼저 들어간게 먼저 나오는 FIFO 방식
(서비스 간 결합도 감소 (MSA), 비동기 처리로 성능 향상, 시스템의 확장성 증가, 트래픽 처리가 용이)
프로듀서란 메시지를 생성하여 큐에 전송하는 입장.
큐는? 메시지가 저장되는 버퍼로 FIFO 방식으로 처리되며 메시지 지속성이 보장된다.
컨슈머란 큐에서 메시지를 가져와서 병렬로 처리가 가능하며, 실패 시에 재처리가 가능
메시지는 순서를 보장하며, 우선순위를 정할 수 있다(큐)
Kafka로 먼저 실습 진행
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
container_name: zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- "2181:2181"
networks:
- kafka-net
kafka:
image: confluentinc/cp-kafka:latest
container_name: kafka
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
networks:
- kafka-net
kafka-ui:
image: provectuslabs/kafka-ui:latest
container_name: kafka-ui
depends_on:
- kafka
ports:
- "8989:8080"
environment:
KAFKA_CLUSTERS_0_NAME: local
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092
KAFKA_CLUSTERS_0_ZOOKEEPER: zookeeper:2181
networks:
- kafka-net
networks:
kafka-net:
driver: bridge
docker.compose.yml
#컨테이너 실행
docker-compose up -d

#컨테이너 상태 확인
docker-compose ps

#로그 확인
docker-compose logs -f kafka

정상적으로 설치 및 기동 완료
#Kafka 컨테이너 접속
docker exec -it kafka bash
#토픽 생성
kafka-topics --create \
--topic email-topic \
--bootstrap-server localhost:9092 \
--partitions 1 \
--replication-factor 1
#토픽 목록 확인
kafka-topics --list \
--bootstrap-server localhost:9092
email-topic 이라는 이름으로 토픽이 생성되었음을 확인
#토픽 상세정보 확인
kafka-topics --describe \
--topic email-topic \
--bootstrap-server localhost:9092

#메시지 생산
kafka-console-producer \
--topic email-topic \
--bootstrap-server localhost:9092
#메시지 소비
kafka-console-consumer \
--topic email-topic \
--from-beginning \
--bootstrap-server localhost:9092