-
Docker로 Spring + Kafka 실행하기프로젝트/선착순 쿠폰 발급 시스템 2023. 4. 22. 00:01반응형
Docker로 카프카 서버 띄우기
사전조건으로 docker와 docker-compose가 이용가능해야 합니다.
window cmd docker-compose.yml 파일 작성하기
#docker-compose.yml version: '2' services: zookeeper: container_name: local-zookeeper image: wurstmeister/zookeeper ports: - "2181:2181" kafka: container_name: local-kafka image: wurstmeister/kafka depends_on: - zookeeper ports: - "9092:9092" environment: KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1 KAFKA_ADVERTISED_PORT: 9092 KAFKA_CREATE_TOPICS: "test:1:1" #topic이름:partition개수:replica개수 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 volumes: - /var/run/docker.sock:/var/run/docker.sock
토픽을 생성하였고 이름을 test로 설정했습니다.
이전에 작성했던 consumer의 topic code를 test로 수정합니다.
@KafkaListener(topics = ["test"], groupId = "test")
Docker Compose 실행
docker-compose up -d
-d 옵션은 백그라운드에서 컨테이너를 띄우는 경우를 의미합니다.
docker desktop을 실행시키지 않고 명령어를 입력하면 다음과 같은 exception이 발생합니다.
명령어 후 에러 각 컨테이너 log 확인 및 container 실행 확인
docker container logs local-zookeeper docker container logs local-kafka #container 실행 확인 docker ps -a
Sptring Boot Application 구성
testController
@RestController class TestController( private val kafkaProducer: KafkaProducer, ) { @PostMapping("/test/kafka") fun testKafka(){ kafkaProducer.send("test","testMessage") } }
이전에 사용했던 api-test-server 모듈을 사용했습니다.
test topic에 testMessage라는 메시지를 전송합니다.
@EnableKafka 추가
@EnableKafka @SpringBootApplication class TestApplication fun main(args: Array<String>) { runApplication<TestApplication>(*args) }
application.yml 구성
spring: profiles: include: - kafka server: port: 9090
build.gradle.kts 디펜던시 추가
dependencies { implementation(project(":kafka")) implementation("org.springframework.boot:spring-boot-starter-web") }
에러 해결
17:51:19.006 [main] ERROR org.springframework.boot.SpringApplication - Application run failed org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property 'spring.profiles.active' imported from location 'class path resource [application-kafka.yml]' is invalid in a profile specific resource [origin: class path resource [application-kafka.yml] - 3:13]
Property 'spring.profiles.active' imported from location 'class path resource [application-dev.yml]' is invalid
I updated Spring cloud application to the latest Spring boot version 2.5.0. But during startup I get this exception: 11:05:05.038 [main] ERROR org.springframework.boot.SpringApplication - Applicati...
stackoverflow.com
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide spring boot 2.4부터 application.yml을 처리하는 방법이 달라져 다음과 같이 처리해주어야 합니다.
Controller 호출
POST localhost:9090/test/kafka
Postman을 통해 호출해 보면 Consumer가 정상적으로 message를 수신합니다.
참고자료
https://pearlluck.tistory.com/638
https://yongil76.github.io/kafka/Kafka_Start/
'프로젝트 > 선착순 쿠폰 발급 시스템' 카테고리의 다른 글
gradle build 속도 개선하기 (0) 2023.04.25 gradlew build 에러 해결 과정 기록 (0) 2023.04.24 kafka 모듈 구성하기 (0) 2023.04.20 Eventual Consistency란? (0) 2023.04.19 서킷 브레이커 구성하기 (0) 2023.02.28