데드 레터 큐를 활용한 반응형 이벤트 기반 앱 구축

이벤트 기반 아키텍처는 사용자의 프로필이 업데이트되는 것과 같은 실제 이벤트에 시스템이 응답할 수 있도록 합니다. 이 게시물은 Spring WebFlux, Apache Kafka 및 Dead Letter Queue를 결합하여 데이터 손실을 처리하는 반응형 이벤트 기반 애플리케이션을 구축하는 방법을 설명합니다. 이들을 함께 사용하면 대규모 애플리케이션이 대량의 데이터를 효율적으로 처리하는 데 필요한 내결함성이 뛰어나고, 회복력이 있으며, 고성능 시스템을 구축할 수 있는 프레임워크를 제공합니다.

이 기사에서 사용된 기능

  • Spring Webflux: 비차단 백프레셔에 의존하는 반응형 패러다임으로 이벤트를 동시에 처리합니다.
  • Apache Kafka: 반응형 Kafka 생산자 및 소비자는 유능하고 적응 가능한 처리 파이프라인을 구축하는 데 도움이 됩니다.
  • Reactive Streams: 이들은 Kafka 생산자 및 소비자의 스트림 실행을 차단하지 않습니다.
  • Dead Letter Queue (DLQ): DLQ는 다양한 이유로 처리되지 못한 메시지를 일시적으로 저장합니다. DLQ 메시지는 나중에 메시지를 재처리하여 데이터 손실을 방지하고 이벤트 처리를 회복력 있게 만드는 데 사용될 수 있습니다.

반응형 Kafka 생산자

반응형 카프카 프로듀서는 병렬로 메시지를 전송하며 발행 중에 다른 스레드를 차단하지 않습니다. 데이터가 많아 처리해야 할 때 유용합니다. Spring WebFlux와 잘 어울리며 마이크로서비스 아키텍처 내에서 백프레셔를 처리합니다. 이 통합은 대규모 메시지를 처리하는 데 도움뿐만 아니라 클라우드 리소스를 효율적으로 관리하는 데도 도움이 됩니다. 

위에 나온 반응형 카프카 프로듀서는 GitHub에서 찾을 수 있습니다.

반응형 카프카 소비자

반응형 카프카 소비자는 블로킹 없이 카프카 메시지를 가져오고 높은 처리량을 유지합니다. 백프레셔 처리를 지원하며 실시간 데이터 처리를 위해 WebFlux와 완벽하게 통합됩니다. 반응형 소비자 파이프라인은 리소스를 효율적으로 관리하며 클라우드에 배포된 애플리케이션에 매우 적합합니다. 

위에 나온 반응형 카프카 소비자는 GitHub에서 찾을 수 있습니다.

데드 레터 큐 (DLQ)

DLQ는 생산자가 보낸 메시지를 저장하고 처리되지 못하는 Kafka 주제입니다. 실시간으로 시스템이 중단 및 실패 없이 작동해야 하며, 이는 이벤트 기반 아키텍처에서 해당 메시지를 Dead Letter Queue로 리디렉션하여 달성할 수 있습니다.

Dead Letter Queue 통합의 장점

  • 메시지 흐름의 중단을 방지하는 후행 메커니즘을 제공합니다.
  • 미처리된 데이터를 보존하고 데이터 손실을 방지하는 데 도움이 됩니다.
  • 실패에 대한 메타데이터를 저장하여 근본 원인 분석에 도움이 됩니다.
  • 미처리된 메시지를 처리하기 위한 다양한 재시도를 제공합니다.
  • 오류 처리를 분리하여 시스템을 탄탄하게 만듭니다.

다음과 같이 생산자 코드에서 실패한 메시지를 DLQ로 푸시할 수 있습니다:

다음과 같이 반응형 소비자에 DLQ 핸들러를 생성해야 합니다:

결론

DLQ를 반응형 프로듀서와 컨슈머와 통합하면 견고하고 내결함성이 뛰어나며 효율적인 이벤트 주도 애플리케이션을 구축하는 데 도움이 됩니다. 반응형 프로듀서는 논블로킹 메시지 발행을 보장하며, 반면에 반응형 컨슈머는 백프레셔를 사용하여 메시지를 처리하여 응답성을 향상시킵니다. DLQ는 장애를 방지하고 데이터 손실을 막는 대체 메커니즘을 제공합니다.

위 아키텍처는 시스템 장애의 격리를 보장하고 응용 프로그램을 개선하기 위해 해결할 수 있는 디버깅을 돕습니다.

위 참조 코드는 GitHub 프로듀서GitHub 컨슈머에서 찾을 수 있습니다.

반응형 프로듀서 및 컨슈머에 대한 자세한 내용은 ReactiveEventDriven에서 확인할 수 있습니다. Spring Apache Kafka 문서에서 DLQ에 대한 더 많은 정보를 얻을 수 있습니다.

Source:
https://dzone.com/articles/reactive-event-driven-app-with-dead-letter-queue