Kafka는 대용량 데이터 스트리밍 시스템으로 많이 사용되며, Spring Boot와의 연동도 간편합니다. 이번 포스트에서는 Kafka에 메시지를 전송하는 Producer 애플리케이션을 Spring Boot로 구현해보겠습니다.
1. 프로젝트 초기 설정
build.gradle에 Kafka 관련 의존성을 추가합니다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.3'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.kafka:spring-kafka'
}
2. Kafka 설정 (application.properties)
Kafka에 메시지를 전송하려면 bootstrap-servers 설정이 필요합니다. 이 값은 Kafka 클러스터의 브로커 주소입니다.
# Kafka 브로커 주소 (Docker 내부 기준)
spring.kafka.bootstrap-servers=kafka-0:9092,kafka-1:9093,kafka-2:9094
# 메시지 직렬화 방식
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
외부에서 접근 시에는 localhost:9094 등 외부 포트를 사용하세요.
3. Kafka 메시지 전송 서비스 작성
package com.example.kafkaproducer.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;
@Service
public class MessageProducer {
private static final String TOPIC = "test-topic";
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
public void sendMessage(String message) {
System.out.println("Sending message: " + message);
kafkaTemplate.send(TOPIC, message);
}
}
4. REST API 컨트롤러 작성
package com.example.kafkaproducer.controller;
import com.example.kafkaproducer.service.MessageProducer;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/kafka")
public class KafkaController {
private final MessageProducer producer;
public KafkaController(MessageProducer producer) {
this.producer = producer;
}
@PostMapping("/send")
public String sendMessage(@RequestParam("message") String message) {
producer.sendMessage(message);
return "Message sent: " + message;
}
}
5. 실행 및 테스트
curl -X POST "http://localhost:8080/api/kafka/send?message=HelloKafka"
Kafka에 메시지가 성공적으로 전송되면, Consumer가 메시지를 수신하게 됩니다.
댓글