Apache Kafka의 핵심 개념을 이해하고 Spring Boot와 함께 사용하는 방법을 알아봅니다.
Apache Kafka는 LinkedIn에서 개발한 분산 스트리밍 플랫폼으로, 대용량 실시간 데이터 처리에 널리 사용됩니다.
Producer는 메시지를 생성하여 Kafka로 전송하고, Consumer는 Kafka에서 메시지를 읽어 처리합니다.
Topic은 메시지를 구분하는 카테고리이며, Partition은 Topic을 나누어 병렬 처리를 가능하게 합니다.
여러 Consumer가 하나의 그룹으로 묶여 메시지를 분산 처리할 수 있습니다.
docker-compose.yml 파일을 작성합니다:
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.5.0
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- "2181:2181"
kafka:
image: confluentinc/cp-kafka:7.5.0
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
실행 명령어:
docker-compose up -d
pom.xml에 다음 의존성을 추가합니다:
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: my-group
auto-offset-reset: earliest
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
@Component
public class KafkaProducer {
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
public void sendMessage(String topic, String message) {
kafkaTemplate.send(topic, message);
}
}
@Component
public class KafkaConsumer {
@KafkaListener(topics = "my-topic", groupId = "my-group")
public void consume(String message) {
System.out.println("Received message: " + message);
}
}
애플리케이션 로그를 Kafka로 전송하고, 이를 Elasticsearch에 저장하여 분석할 수 있습니다.
마이크로서비스 간 비동기 통신을 위해 Kafka를 이벤트 버스로 활용할 수 있습니다.
IoT 센서 데이터나 사용자 행동 데이터를 실시간으로 수집하고 분석할 수 있습니다.
Kafka Manager나 Kafka UI 같은 도구를 사용하여 클러스터 상태를 모니터링할 수 있습니다.
Apache Kafka는 대규모 실시간 데이터 처리에 매우 효과적인 플랫폼입니다. 기본 개념을 이해하고 Spring Boot와 함께 사용하면 강력한 스트리밍 애플리케이션을 구축할 수 있습니다.
다음 포스트에서는 Kafka Streams API를 활용한 고급 스트림 처리에 대해 알아보겠습니다!
Spring의 @Controller와 @RestController 어노테이션의 차이점과 사용 시나리오를 실제 예제와 함께 알아봅니다
Spring Boot를 사용하여 간단한 REST API를 만드는 방법을 단계별로 알아봅니다.
overflow-x: hidden으로 덮어둔 문제가 터지기까지. 테이블 오버플로부터 Radix Sheet 스크롤 잠금까지, 모바일 가로 스크롤 문제를 근본적으로 해결한 과정을 정리합니다.
백준 2526번 싸이클 문제를 풀며 나머지 연산의 순환 특성을 이해하고 최적화하는 과정