본문 바로가기
TWIL

Spring Cloud Stream으로 Kafka 메시지 처리하기 - 1

by swims 2025. 3. 17.

Spring Cloud Stream?

- 마이크로 서비스 아키텍처에서 이벤트 기반 메시징을 쉽게 처리할 수 있도록 도와주는 프레임워크
- Kafka, RabbitMQ, AWS SQS 와 같은 메세지 브로커와의 통합을 단순화하고, 프로듀서와 컨슈머를 쉽게 구현할 수 있도록 지원한다. 

Spring Cloud Stream 구성 요소

1. Binder : 특정 메세지 브로커와 연결을 담당한다. Spring cloud stream 의 바인더를 사용하면 메세지를 발행하고 소비하기 위해 플랫폼마다 별도의 라이브러리와 API를 제공하지 않고도 메세징을 사용할 수 있다.
  - Kafka, Kafka Stream, AWS SQS, RabbitMQ 등 다양한 바인더가 구현되어 있다.
  - 메세지 브로커가 변경돼도 코드 수정을 최소화 하면서 바인더만 교체가능하고, 하나의 프로젝트에서 여러 종류의 메세지 브로커를 사용하더라도 동일한 형태로 구현할 수 있다.  


2. Bindings : Application과 브로커간 메세지를 주고 받는 방식을 정의한 개체 (Producer & Consumer)  


3. Message Channel : 메시지 생산자와 소비자가 메시지를 발행하거나 소비한 후 메시지를 보관할 큐를 추상화한 것이다. 코드에서는 큐 이름을 직접 사용하지 않고 채널 이름을 사용한다.  

4. Producer & Consumer
  - Producer (Source) : 메세지를 생성해서 Output Channel을 통해 브로커로 보낸다.
  - Consumer (Sink) : 브로커에서 메세지를 받아서 Input Channel을 통해 처리한다.  



멀티브로커 환경에서는 Spring Cloud Stream이 유리하고, Kafka만 사용할거면 가벼운 Spring kafka가 나은거 같다.   

참고: Spring Cloud Stream vs Spring Kafka vs Kafka-Client

 

Spring cloud stream

- 고수준 추상화 (다양한 메세지 브로커 지원)

- Kafka, RabbitMQ, Aws SQS 등 다양한 브로커 지원

- 설정 변경으로 다른 메세지 브로커로 이동 가능

Spring kafka 

- 중간 수준 추상화

- offset 자동 관리

- Kafka 전용, 디테일한 설정 가능

 

Kafka clients

- 낮은 수준의 추상화

- offset 수동처리, commit 필요

- Kafka 전용, Kafka 기본 API를 다룰 수 있음

 Reference  

https://docs.spring.io/spring-cloud-stream/docs/current/reference/html/spring-cloud-stream-binder-kafka.html#_kafka_streams_binder 


https://docs.spring.io/spring-cloud-stream/reference/