Kafka는 대용량 실시간 메시지 스트리밍 시스템입니다.
이번 글에서는 Kafka를 통해 전송된 메시지를 수신하는 Consumer 애플리케이션을 Spring Boot로 구현하는 방법을 상세히 설명하겠습니다.
Kafka Consumer란?
Kafka의 Consumer는 특정 토픽(topic) 으로부터 메시지를 수신하여 처리하는 역할을 합니다.
- 하나의 토픽에는 여러 Consumer가 구독할 수 있습니다.
- Consumer는 Group ID를 기준으로 그룹화되어 메시지를 분산 처리합니다.
1. 의존성 설정
build.gradle 예시
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.kafka:spring-kafka'
}
2. Kafka Consumer 설정 (application.properties)
Spring Boot에서 Kafka Consumer를 설정하려면 application.properties 또는 application.yml 파일을 사용합니다.
# Kafka 브로커 주소 (Docker나 클러스터 환경에 따라 변경)
spring.kafka.bootstrap-servers=kafka-0:9092,kafka-1:9093,kafka-2:9094
# Consumer 그룹 ID (여러 Consumer가 같은 그룹 ID를 사용하면 메시지를 나눠받습니다)
spring.kafka.consumer.group-id=springtest
# 토픽의 가장 처음부터 메시지를 읽음
spring.kafka.consumer.auto-offset-reset=earliest
# 직렬화/역직렬화 방식 설정 (기본 문자열)
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
3. Kafka Consumer 구현 클래스
Kafka 메시지를 수신하려면 @KafkaListener를 사용합니다.
package com.example.kafkaconsumer.consumer;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
@Component
public class MessageConsumer {
@KafkaListener(topics = "test-topic", groupId = "springtest")
public void listen(ConsumerRecord<String, String> record) {
System.out.println("Received message: key = " + record.key() +" value = "+ record.value() + " from partition: " + record.partition());
}
}
주요 포인트
항목 | 설명 |
@KafkaListener | 메시지를 수신할 토픽 및 그룹 ID 지정 |
topics | 수신 대상 Kafka 토픽 이름 |
groupId | Consumer 그룹 식별자 |
ConsumerRecord | 메시지의 key, value, offset, partition 등의 정보 포함 |
4. 실행 및 테스트
- Kafka 클러스터 실행
- Consumer 프로젝트 실행
- Producer를 통해 메시지 전송 (예: curl, Kafka UI 등 사용)
curl -X POST "http://localhost:8080/api/kafka/send?message=HelloKafka"
Consumer 콘솔 출력:
Received message: HelloKafka from partition: 1
5.UI for Apache Kafka에서 테스트
메세지전송

콘솔 확인

마무리
Kafka Consumer는 @KafkaListener만으로도 간단하게 구현할 수 있습니다.
다양한 메시지 포맷(JSON, Avro 등)이나 병렬 처리, 파티션 지정 등 고급 설정도 지원합니다.
댓글