[Spring Boot] Apache Kafka에 대해서 알아보자
KUKJIN LEE • 2일 전 작성
쉽게 이해하자면, 여러 부서가 존재하는 회사에서 각 부서는 정보가 필요할 때 요청 부서로 찾아 갈 게 아니라, 중앙 우편실을 방문해 필요한 문서를 가져와 처리하는 것입니다. 반대로 타 부서에서 필요한 정보가 있을 때 중앙 우편실에 정보를 맡겨두면 타 부서도 중앙 우편실에서 정보를 찾아갈 수 있습니다.
Apache Kafka는 대규모 데이터 스트림을 빠르고 안정적으로 처리하기 위한 분산 스트리밍 플랫폼입니다. 메시지 브로커 역할 뿐 아니라, 실시간 데이터 파이프라인과 스트림 처리에도 적합합니다.
Apache Kafka란?
Apache Kafka는 분산 메시지 큐 시스템으로 시작했으나, 지금은 대규모 데이터 처리와 스트림 처리 기능을 포괄하는 플랫폼으로 발전했습니다.
-
토픽(Topic): 정보가 저장되는 논리적 파티션 단위이며, Producer가 토픽에 정보(메시지)를 기록하고 Consumer는 해당 토픽으로부터 정보를 얻을 수 있습니다.
-
파티션(Partition): 각 토픽은 파티션으로 나뉘며, 이를 통해 확장성과 처리량 향상이 가능합니다.
-
고가용성 및 내결함성: 클러스터링과 복제(Replication)을 통해 노드 장애 발생시에도 데이터 유실 없이 안정적으로 서비스를 제공합니다.
-
높은 처리량과 낮은 지연: 대용량 데이터를 실시간에 가깝게 처리할 수 있어 로그 수집, 실시간 분석, 이벤트 기반 아키텍처 구현에 널리 쓰인다.
구조 개요
-
Producer: Kafka Template를 사용하여 토픽에 메시지를 기록합니다.
-
Broker(Kafka Cluster): Kafka 노드들이 클러스터를 이루어 토픽을 관리하고 파티션을 통해 메시지를 저장, 복제합니다.
-
Consumer: 특정 토픽으로부터 메시지를 읽고 처리합니다.
Producer 코드 예시
package com.example.kafka;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;
import java.util.UUID;
@Service
public class ProductProducer {
private final KafkaTemplate<String, Product> kafkaTemplate;
public ProductProducer(KafkaTemplate<String, Product> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
public void sendProduct(String name) {
Product product = new Product();
product.setId(UUID.randomUUID().toString());
product.setName(name);
kafkaTemplate.send("product-topic", product.getId(), product);
}
}
Consumer 코드 예시
package com.example.kafka;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;
@Service
public class ProductConsumer {
@KafkaListener(topics = "product-topic", groupId = "product-group")
public void consume(Product product) {
System.out.println("Received product: " + product.getId() + " " + product.getName());
}
}
Apache Kafka란?에 대해서 간단하게 알아봤습니다. RabbitMQ와 비슷하면서 다릅니다. RabbitMQ가 전통적인 메시지 큐(Message Queue)모델에 가깝고, Kafka는 로그 기반 스트리밍 플랫폼에 가깝습니다. 비동기 요청-응답에 초점을 맞춘다면 RabbitMQ, 대량의 데이터를 다룬다면 Kafka가 적합합니다.