[Kafka] SpringBoot3.x.x에서 Kafka 연동하기

2024. 2. 18. 00:45·Apache Kafka
반응형
 
 
 

스프링 부트 3.1.2에 Kafka를 세팅해 보자

📌 서론

이전 포스트를 통해 docker-compose로 Kafka를 띄웠다.

이번 포스트에서는 SpringBoot3.1.2에 세팅한 카프카를 연결하고 우리가 원했던 대로 예외가 발생하면 예외 메시지를 카프카의 producer로 발행한 다음 docker-desktop의 콘솔을 통해 consumer로 메시지를 잘 받는지 확인했다.

이번 포스트에서는 그 과정을 설명한다.

이전 포스트를 통해 docker-compose로 kafka를 실행하고 오도록 하자 (M1 mac 기준)

 

[kafka] Docker로 카프카 실행하기 (KRaft 모드)

Docker를 통해 Kafka를 실행해 보자📌 서론이전에도 kafka 세팅에 대해 포스팅을 한 적이 있지만 가장 최근에 새롭게 세팅을 하면서 알게 된 점들을 정리해 봤다.특히 port를 설정할 때 내부, 외부로

curiousjinan.tistory.com

 

1. 스프링 부트에 Kafka 세팅하기

build.gradle에 의존성 추가

  • 가장 빠르게 필요한 의존성의 버전을 알아보는 방법은 spring initialize를 사용하는 것이다.
 

Spring for Apache Kafka

The Spring for Apache Kafka (spring-kafka) project applies core Spring concepts to the development of Kafka-based messaging solutions. It provides a "template" as a high-level abstraction for sending messages. It also provides support for Message-driven PO

spring.io

// kafka  
implementation 'org.springframework.kafka:spring-kafka'

의존성을 추가한 다음 applicationo.yml에 카프카 설정 코드를 작성했다.

  • 나는 active-profile 기능을 사용 중이라 yml 중 dev에만 설정을 했다.
  • 아래의 설정 코드에서 consumer관련해서 빠진 부분이 있다. (아래의 포스트를 통해 확인해 보자)
spring:  
    kafka:  
      producer:    
        bootstrap-servers: localhost:10000,localhost:10001,localhost:10002 # 카프카 서버 주소  
        key-serializer: org.apache.kafka.common.serialization.StringSerializer  
        value-serializer: org.apache.kafka.common.serialization.StringSerializer  
      consumer:  
        group-id: error-handler-group  
        auto-offset-reset: earliest  
      template:  
        default-topic: error-messages

앞으로 계속 따라올 예정이라면 먼저 아래의 글을 통해 application.yml을 수정하고 진행하도록 하자

 

[kafka] Spring실행 시 consumer 연결문제 해결

SpringBoot 설정을 잘못해서 kafka 연결이 안 되는 문제를 해결했다. 📌 서론 이번 포스트는 SpringBoot의 application.yml에 kafka 설정을 잘못해서 오류가 발생한 부분을 수정한 내용이다. 발생했던 오류는

curiousjinan.tistory.com

 

2. 예외처리 코드에 카프카 메시지를 발행하는 코드를 추가했다.

중앙 집중 예외처리 코드에 Kafka 메시지를 발행하는 코드 추가

  • 나는 @RestControllerAdvice를 통해 중앙 집중 예외처리를 하고 있는데 여기서 kafka에 메시지를 발행하도록 할 것이다.
  • 오류가 발생하면 kafka에 메시지를 발행하도록 커스텀 예외처리 코드에 추가했다.

controllerAdvice 코드 수정
controllerAdvice 코드 수정

예외에 대한 응답을 처리하는 코드는 다음과 같이 동작한다.

  • 아래와 같이 코드를 2개로 나눴다.
  • 레시피아 에러는 kafka 메시지 발행을 하지 않고 그 외의 파악하기 힘든 위급한 에러들만 카프카에 메시지를 발행하도록 했다.

카프카 에러 메시지 발행
카프카 에러 메시지 발행

3. 예외를 발생시켜서 검증하기

먼저 kafka메시지를 발행하지 않는 예외를 강제로 던지기

  • 레시피 단건 조회를 하면 강제로 레시피아 에러를 던지도록 했다.

예외를 던지는 코드
예외를 던지는 코드

  • 예외는 다음과 같다. (참고로 이 예외를 던졌을 때는 kafka 컨슈머에 아무런 메시지가 안 나와야 한다.)

커스텀 예외코드 확인
커스텀 예외코드 확인

  • postman을 통해 요청을 보냈다. (message가 null인 이유는 코드 자체에 null로 세팅해서 그렇다.)

포스트맨 요청 던지기
포스트맨 요청 던지기

  • docker-deskop의 콘솔에서 컨슈머는 아무런 메시지를 받지 않았다. (kafka 메시지 발행이 안되어 테스트에 성공했다.)

docker desktop 콘솔 확인
docker desktop 콘솔 확인

이번에는 kafka메시지를 발행하는 예외를 던졌다.

  • kafka 메시지를 발행하는 IllegalArgumentException을 던지도록 코드를 수정했다.

카프카 메시지를 발행하는 예외
카프카 메시지를 발행하는 예외

  • 이번에도 아래와 같이 postman에 동일한 요청을 보냈다.

포스트맨에 요청 보내기
포스트맨에 요청 보내기

  • docker-desktop의 콘솔에서 컨슈머를 확인했더니 다음과 같은 결과가 나왔다. (발행된 메시지를 잘 받았다.)

docker desktop 콘솔
docker desktop 콘솔

이렇게 Kafka를 세팅했고 특정 예외가 발생하면 kafka producer로 메시지를 발행하고 consumer로 메시지를 받는 것까지 검증하는 데 성공했다. 

 

다음 포스트를 통해 슬랙의 webhook 설정을 해보자

 

[Kafka] 슬랙 webhook 설정하기 (kafka에서 호출)

슬랙의 WebHook 세팅하기 📌 서론 이전 포스트를 통해 SpringBoot에 Kafka 설정을 완료했다. Slack에 알림 메시지를 띄우기 위해서는 webhook url이 필요하다. 이번 포스트에서는 Slack에서 webhook url을 발급

curiousjinan.tistory.com

사이드 팀원 "평양냉면"님의 블로그도 방문해주세요! 좋은 글이 많습니다.

 

하다보니 재미있는 개발

하다 보니 재미있는 개발에 빠져있는 중입니다. 문의사항: ysoil8811@gmail.com

yijoon009.tistory.com

반응형

'Apache Kafka' 카테고리의 다른 글

[kafka] 스프링부트와 kafka를 이용한 slack 예외알림 구현  (1) 2024.02.18
[Kafka] 슬랙 webhook 설정하기 (kafka에서 호출)  (0) 2024.02.18
[Kafka] Docker로 Kafka 세팅하기 (Kraft 방식, M1 Mac)  (2) 2024.02.17
Kafka(카프카) 메시지 포맷(message format)의 구조와 특징 이해하기  (21) 2023.12.27
Kafka(카프카)의 고가용성 및 대규모 데이터 처리방법  (5) 2023.12.27
'Apache Kafka' 카테고리의 다른 글
  • [kafka] 스프링부트와 kafka를 이용한 slack 예외알림 구현
  • [Kafka] 슬랙 webhook 설정하기 (kafka에서 호출)
  • [Kafka] Docker로 Kafka 세팅하기 (Kraft 방식, M1 Mac)
  • Kafka(카프카) 메시지 포맷(message format)의 구조와 특징 이해하기
Stark97
Stark97
문의사항 또는 커피챗 요청은 링크드인 메신저를 보내주세요! : https://www.linkedin.com/in/writedev/
  • Stark97
    오늘도 개발중입니다
    Stark97
  • 전체
    오늘
    어제
    • 분류 전체보기 (240)
      • 개발지식 (20)
        • 스레드(Thread) (8)
        • WEB, DB, GIT (3)
        • 디자인패턴 (8)
      • JAVA (21)
      • Spring (88)
        • Spring 기초 지식 (35)
        • Spring 설정 (6)
        • JPA (7)
        • Spring Security (17)
        • Spring에서 Java 활용하기 (8)
        • 테스트 코드 (15)
      • 아키텍처 (5)
      • MSA (14)
      • DDD (7)
      • gRPC (9)
      • Apache Kafka (18)
      • DevOps (23)
        • nGrinder (4)
        • Docker (1)
        • k8s (1)
        • 테라폼(Terraform) (12)
      • AWS (32)
        • ECS, ECR (14)
        • EC2 (2)
        • CodePipeline, CICD (8)
        • SNS, SQS (5)
        • RDS (2)
      • notion&obsidian (3)
  • 링크

    • notion기록
    • 깃허브
    • 링크드인
  • hELLO· Designed By정상우.v4.10.0
Stark97
[Kafka] SpringBoot3.x.x에서 Kafka 연동하기
상단으로

티스토리툴바