Spring Boot와 함께 Apache Kafka 구성 및 사용

May 13 2023
스프링 부츠를 신은 카프카
소개 Apache Kafka는 대규모, 높은 처리량, 내결함성 실시간 데이터 스트리밍을 처리하는 오픈 소스 분산 스트리밍 플랫폼입니다. 이 시스템은 생산자가 주제에 메시지를 게시하고 소비자가 해당 주제를 구독하여 메시지를 소비하는 게시-구독 모델을 기반으로 합니다.
이미지 출처

소개

Apache Kafka는 대규모, 높은 처리량, 내결함성 실시간 데이터 스트리밍을 처리하는 오픈 소스 분산 스트리밍 플랫폼입니다. 이 시스템은 생산자가 주제에 메시지를 게시하고 소비자가 해당 주제를 구독하여 메시지를 소비하는 게시-구독 모델을 기반으로 합니다. Apache Kafka 사용 사례는 실시간 분석, 이벤트 기반 아키텍처, 로그 집계, 메시징 시스템 및 확장 가능한 데이터 파이프라인 구축과 같은 시나리오에서 볼 수 있습니다.

이 문서의 사용법:

이 문서를 사용하여 Apache Kafka를 구성하고 사용하여 Spring 부트 애플리케이션에서 메시지(JSON 콘텐츠)를 생성하고 사용할 수 있습니다.

전제 조건

이 문서를 진행하기 전에 Java, spring-boot, Apache Kafka, maven 또는 Gradle에 대해 잘 알고 있어야 합니다. 그렇지 않으면 공식 문서 및 가이드를 확인하도록 제안할 것입니다.

설치

Kafka 주제에 대한 메시지를 생성하기 전에 몇 가지 단계를 완료하여 pom.xml(Maven) 또는 build.gradle(Gradle 프로젝트)에서 필수 종속성을 구성해야 합니다.

메이븐의 경우:

For Gradle 
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.kafka</groupId>
   <artifactId>spring-kafka</artifactId>
</dependency>

implementation ‘org.springframework.boot:spring-boot-starter’
implementation ‘org.springframework.kafka:spring-kafka’

구성

Application.properties 파일에 Kafka 속성을 구성하면 사용자 지정 속성도 가질 수 있습니다. Kafka 서버의 부트스트랩 서버 및 필요한 추가 구성 속성(예: 소비자 그룹 ID)을 지정합니다.

Application.properties

spring.kafka.bootstrap-servers=<kafka-bootstrap-servers> 
spring.kafka.consumer.group-id=<consumer-group-id>
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.app.topic=<topic-name>


spring.kafka.bootstrap-servers=localhost:9092 
spring.kafka.consumer.group-id=group_category
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.app.topic=my-topic

Kafka 생산자는 Kafka 토픽에 메시지를 보내는 구성 요소입니다. 하나 이상의 Kafka 소비자가 사용할 수 있는 Kafka에 데이터를 게시합니다.

Kafka 생산자를 만들려면 다음 단계를 수행해야 합니다.

  1. Kafka 생산자 속성 구성: 부트스트랩 서버(Kafka 브로커의 주소) 및 직렬화 설정과 같은 Kafka 생산자에 필요한 구성 속성을 설정합니다. 이것은 우리가 이미 마지막 단계에서 수행한 것입니다.
  2. Kafka 생산자 만들기: Kafka에 메시지 보내기 Spring Kafka에서 제공하는 템플릿을 사용할 수 있습니다. 다음은 간단한 생산자의 예입니다.
  3. import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.kafka.core.KafkaTemplate;
    import org.springframework.stereotype.Service;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    @Component
    public class KafkaEventProducer {
     
     private static final Logger logger = LoggerFactory.getLogger(KafkaEventProducer.class);
     
     @Autowired
     private KafkaTemplate<String, String> kafkaTemplate;
     
     public void sendMessage(String topic, String message) {
       logger.info("Producing message [{}]", message);
       kafkaTemplate.send(topic, message);
     }
    }
    

  4. Kafka 생산자 속성 구성: application.properties 파일에서 Kafka 속성을 구성합니다. Kafka 서버의 부트스트랩 서버 및 소비자에 필요한 추가 구성 속성을 지정합니다.
  5. Kafka 소비자 리스너 만들기: Kafka에서 새 메시지를 받을 때마다 호출할 메서드를 애플리케이션에 구현합니다. Spring Kafka에서 제공하는 kafkaListener 주석을 사용하십시오.
  6. import org.springframework.kafka.annotation.KafkaListener;
    import org.springframework.stereotype.Component;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    @Component
    public class KafkaEventConsumer {
    
    private static final Logger logger = LoggerFactory.getLogger(KafkaEventConsumer.class);
    
    @KafkaListener(topics = “<topic-name>”, groupId = “<consumer-group-id>”)
     public void consumeMessage(String message) {
      //Use log
     log.info("Consumed message [{}]", message);
     }
    }
    
    

    @KafkaListener(topics = “${spring.kafka.app.topic}”,groupId= “${spring.kafka.consumer.group-id}”)
    

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MainApplication {

 @Autowired
 private KafkaEventProducer kafkaEventProducer;

 public static void main(String[] args) {
   SpringApplication.run(MainApplication.class, args);
 }
 
 public void YourMethod() {
 // Send a message using the Kafka producer
 kafkaEventProducer.sendMessage(“<topic-name>”, “Oh Kafka Boy How'z Everything?”);
 }
}

결론

결론적으로 Spring Boot는 Apache Kafka를 애플리케이션에 통합하기 위한 탁월한 지원을 제공합니다. Spring Boot의 Kafka 지원을 통해 Kafka 생산자와 소비자를 쉽게 생성하고 Kafka 속성을 구성하고 메시지 처리를 처리할 수 있습니다.
Spring Boot와 Kafka의 통합은 Kafka 기반 애플리케이션의 개발을 단순화하여 더 높은 수준의 추상화를 제공하고 필요한 상용구 코드의 양을 줄입니다.

그리고 코드를 실행하기 전에 Kafka 서버가 실행 중이고 주제가 생성되었는지 확인하십시오.

참고: Spring Boot에서 Kafka 통합에 사용할 수 있는 다양한 기능과 옵션을 더 잘 이해하려면 공식 Spring Kafka 설명서를 참조하고 Spring Kafka 샘플을 살펴보세요.

감사합니다!