관리 메뉴

개발 여행자, 현

[Kafka, Springboot] 스프링부트 카프카 연동하기 본문

백엔드

[Kafka, Springboot] 스프링부트 카프카 연동하기

예스현 2023. 2. 28. 14:42

 Springboot + Kafka 연동하기 (기본세팅)

 

1. https://start.spring.io 를 통해 스프링부트 프로젝트 생성


2. application.yml 파일 수정

  • spring.kafka.consumer
    • bootstrap-servers
      : Kafka 클러스터에 대한 초기 연결에 사용할 호스트:포트쌍의 쉼표로 구분된 목록
      : 글로벌 설정이 있어도, consumer.bootstrap-servers가 존재하면 consuemer 전용으로 오버라이딩
    • group-id
      : Consumer는 Consumer Group이 존재하기 때문에, 유일하게 식별 가능한 Consumer Group을 작성
    • auto-offset-reset
      : Kafka 서버에 초기 offset이 없거나, 서버에 현재 offset이 더 이상 없는 경우 수행할 작업을 작성
      : Consumer Group의 Consumer는 메시지를 소비할 때 Topic내에 Partition에서 다음에 소비할 offset이 어디인지 공유를 하고 있다. 그런데 오류 등으로 인해. 이러한 offset 정보가 없어졌을 때 어떻게 offeset을 reset 할 것인지를 명시ㅎ한다.
      1) latest : 가장 최근에 생산된 메시지로 offeset reset
      2) earliest : 가장 오래된 메시지로 offeset reset3) none : offset 정보가 없으면 Exception 발생

      직접 Kafka Server에 접근하여 offset을 reset할 수 있지만, Spring에서 제공해주는 방식은 위와 같음

    • key-deserializer / value-deserializer
      • Kafka에서 데이터를 받아올 때, key / value를 역직렬화
      • 여기서 key와 value는 뒤에서 살펴볼 KafkaTemplate의 key, value를 의미
      • 이 글에서는 메시지가 문자열 데이터이므로 StringDeserializer를 사용. JSON 데이터를 넘겨줄 것이라면 JsonDeserializer도 가능
  • spring.kafka.producer
    • bootstrap-servers
      : consumer.bootstrap-servers와 동일한 내용이며, producer 전용으로 오버라이딩 하려면 작성
    • key-serializer / value-serializer
      : Kafka에 데이터를 보낼 때, key / value를 직렬화
      : consumer에서 살펴본 key-deserializer, value-deserializer와 동일한 내용


    3. KafkaController.java 파일 생성


-> GET 방식으로 /kafka 요청이 들어오면 KafkaProducer서비스를 실행


4. KafkaProducer.java 파일 생성

-> KafkaTemplate에 Topic명과 Message를 전달

-> KafkaTemplate.send() 메서드는 여러 개가 있지만, 파라미터로 Topic과 message만 전달하는 메소드가 실행

 

* MVP / Controller,Service,Repository란?


[출처] https://velog.io/@jybin96/Controller-Service-Repository-가-무엇일까


5.  KafkaConsumer.java 파일 생성

-> Kafka로부터 메시지를 받으려면 @KafkaListener 어노테이션 붙이기

6. Message 주고받기 테스트

Postman을 이용하여 Springboot가 띄워져있는 http://127.0.0.1:8080/kakfa GET 호출

-> 콘솔에서 어떤 message 데이터를 넣었고 들어왔는지 확인가능 (Producer 작성코드)

 

그 후 터미널에서 new-topic 이름의 Topic을 확인할 수 있다.

$ kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic new-topic

 

 

'백엔드' 카테고리의 다른 글

[Docker] Docker Compose ELK 구축  (0) 2023.02.28
[ELK] ELK 설치  (0) 2023.02.28
[Kafka] 카프카란?  (0) 2023.02.28