스프링 부트 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에 메시지를 발행하도록 커스텀 예외처리 코드에 추가했다.
예외에 대한 응답을 처리하는 코드는 다음과 같이 동작한다.
- 아래와 같이 코드를 2개로 나눴다.
- 레시피아 에러는 kafka 메시지 발행을 하지 않고 그 외의 파악하기 힘든 위급한 에러들만 카프카에 메시지를 발행하도록 했다.
3. 예외를 발생시켜서 검증하기
먼저 kafka메시지를 발행하지 않는 예외를 강제로 던지기
- 레시피 단건 조회를 하면 강제로 레시피아 에러를 던지도록 했다.
- 예외는 다음과 같다. (참고로 이 예외를 던졌을 때는 kafka 컨슈머에 아무런 메시지가 안 나와야 한다.)
- postman을 통해 요청을 보냈다. (message가 null인 이유는 코드 자체에 null로 세팅해서 그렇다.)
- docker-deskop의 콘솔에서 컨슈머는 아무런 메시지를 받지 않았다. (kafka 메시지 발행이 안되어 테스트에 성공했다.)
이번에는 kafka메시지를 발행하는 예외를 던졌다.
- kafka 메시지를 발행하는 IllegalArgumentException을 던지도록 코드를 수정했다.
- 이번에도 아래와 같이 postman에 동일한 요청을 보냈다.
- 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 |