오늘날의 마이크로서비스 및 이벤트 주도 아키텍처에서 Apache Kafka는 스트리밍 애플리케이션의 사실상 표준입니다. 그러나 Spring Boot 애플리케이션과 함께 로컬 개발을 위해 Kafka를 설정하는 것은 까다로울 수 있으며, 특히 로컬에서 실행하도록 구성할 때 더욱 그렇습니다.
Spring Boot 애플리케이션은 spring-kafka 메이븐 패키지를 통해 Kafka 통합을 지원합니다. spring-kafka와 작업하기 위해서는 Kafka 인스턴스에 연결해야 합니다. 일반적으로 개발 중에는 로컬 Kafka 인스턴스를 실행하고 이에 대해 빌드합니다. 그러나 Docker Desktop과 컨테이너를 사용하면 로컬 Kafka 인스턴스를 실행하는 것보다 훨씬 쉽게 설정할 수 있습니다. 이 기사에서는 Spring Boot 애플리케이션과 함께 로컬 Kafka 컨테이너를 설정하는 단계를 안내합니다.
사전 요구 사항
- Docker Desktop을 설정해야 합니다. 이를 위해 이 기사를 참조할 수 있습니다.
- spring-kafka 패키지가 구성된 Spring Boot 애플리케이션입니다.
Kafka 컨테이너 실행
Kafka 컨테이너를 실행하기 위해 먼저 다음 docker-compose 파일을 사용할 것입니다:
version'3'
services
zookeeper
image confluentinc/cp-zookeeper latest
environment
ZOOKEEPER_CLIENT_PORT2181
ports
"2181:2181"
kafka
image confluentinc/cp-kafka latest
environment
KAFKA_ZOOKEEPER_CONNECT zookeeper2181
KAFKA_ADVERTISED_LISTENERS PLAINTEXT //localhost9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR1
ports
"9092:9092"
depends_on
zookeeper
이 docker-compose 파일은 Kafka 컨테이너와 그 종속성인 Zookeeper 컨테이너를 끌어오기 위한 구성을 포함하고 있습니다. Zookeeper는 클러스터 내의 Kafka 브로커 노드를 관리합니다; 이에 대한 더 자세한 내용은 이 기사에서 확인할 수 있습니다.
컨테이너를 Docker Desktop에 등록하기 위해 다음 명령을 사용할 것입니다:
docker-compose up -d
이는 필요한 이미지를 끌어오고 컨테이너를 시작하며, 컨테이너가 시작된 후에는 Docker Desktop에서 아래와 같이 컨테이너를 확인할 수 있습니다:
이제 Kafka 컨테이너가 실행 중이므로 Docker Desktop 콘솔을 사용하여 다음 명령을 사용하여 필요한 토픽을 생성할 수 있습니다:
kafka-topics --create --topic user-notification --partitions 1 --replication-factor 1 --bootstrap-server localhost:9092
이제 컨테이너가 실행 중이고 필요한 전제 조건이 완료되었으므로 Spring Boot 애플리케이션을 시작할 수 있습니다. Spring Boot 애플리케이션의 경우 Kafka 부트스트랩 주소를 아래와 같이 구성하십시오:
kafka.bootstrapAddress=localhost:9092
Spring Boot 애플리케이션을 시작하면, Spring Boot 애플리케이션이 프로듀서인지 소비자인지에 따라 Kafka와의 연결에 대한 로그를 확인해야 합니다.
기사에 설명된 단계를 따라 Kafka 컨테이너와 Spring Boot 애플리케이션을 사용한 로컬 개발 환경을 설정했습니다.
Source:
https://dzone.com/articles/setting-up-local-kafka-container-for-spring-boot-application