>  기사  >  Java  >  Spring Boot 및 Apache Kafka Streams를 사용하여 스트림 처리 애플리케이션 구축

Spring Boot 및 Apache Kafka Streams를 사용하여 스트림 처리 애플리케이션 구축

WBOY
WBOY원래의
2023-06-23 08:32:221515검색

빅데이터 시대가 도래하면서 실시간 데이터 처리 및 분석 요구 사항을 충족하기 위해 스트림 처리 기술에 주목하는 기업이 점점 더 많아지고 있습니다. Apache Kafka는 스트림 처리 분야에서 사실상의 표준이 된 높은 처리량과 확장 가능한 분산 메시지 대기열 시스템입니다. Spring Boot는 Spring 애플리케이션을 신속하게 개발하기 위한 도구로, 스트림 처리 애플리케이션을 더 빠르고 쉽게 구축하는 데 도움이 됩니다. 이 기사에서는 Spring Boot와 Apache Kafka Streams를 사용하여 스트림 처리 애플리케이션을 구축하는 방법을 소개하고, 이 두 도구의 장점과 단점, 애플리케이션 성능을 최적화하는 방법에 대해 논의합니다.

  1. Kafka 주제 만들기

애플리케이션 구축을 시작하기 전에 먼저 Kafka 주제를 만들어야 합니다. 이 글에서는 웹사이트에 사용자 클릭 이벤트를 저장하는 "user-clicks"라는 주제를 생성하겠습니다.

명령줄에서 다음 명령을 실행하세요.

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic user-clicks

이렇게 하면 하나의 파티션과 로컬 복사본만 있는 Kafka 서버에 "user-clicks"라는 주제가 생성됩니다.

  1. Creating a Spring Boot Application

다음으로 Spring Boot를 사용하여 기본 애플리케이션을 생성하겠습니다. Spring Boot에서는 Spring Initializr를 사용하여 기본 애플리케이션을 빠르게 생성할 수 있습니다. 애플리케이션을 생성할 때 다음 종속성을 선택해야 합니다.

  • Spring Kafka
  • Spring Web

애플리케이션을 생성한 후 다음 종속성을 추가합니다.

<dependency>
   <groupId>org.apache.kafka</groupId>
   <artifactId>kafka-streams</artifactId>
   <version>2.6.0</version>
</dependency>

이것은 Kafka 스트림 처리 API를 제공합니다.

  1. Kafka 스트림 처리 구현

이제 Kafka 스트림 처리 코드 작성을 시작할 수 있습니다. 애플리케이션을 생성할 때 "UserController"라는 컨트롤러 클래스를 정의했습니다. 이제 컨트롤러 클래스에 "clicks"라는 POST 요청 핸들러를 추가하겠습니다. 이 핸들러는 POST 요청에서 사용자의 클릭 이벤트를 가져와 "user-clicks"라는 Kafka 주제로 보냅니다. 코드는 다음과 같습니다.

@RestController
public class UserController {

   private final KafkaTemplate<String, String> kafkaTemplate;

   @Autowired
   public UserController(KafkaTemplate<String, String> kafkaTemplate) {
       this.kafkaTemplate = kafkaTemplate;
   }

   @PostMapping("/clicks")
   public void clicks(@RequestBody String click) {
       kafkaTemplate.send("user-clicks", click);
   }
}

위 코드에서는 Spring의 종속성 주입 기능을 사용하여 "kafkaTemplate"이라는 KafkaTemplate 개체를 주입합니다. 이 개체는 Kafka 주제에 메시지를 보내는 데 사용할 수 있습니다.

  1. Kafka 스트리밍 토폴로지 생성

다음으로 "user-clicks" 주제에서 수신된 클릭 이벤트를 처리하기 위한 Kafka 스트리밍 토폴로지를 생성하겠습니다. 이 예에서는 Kafka Streams API를 사용하여 스트림 처리 토폴로지를 구현합니다.

Spring Boot 애플리케이션에서는 Kafka Streams API를 사용하여 클릭 이벤트를 처리하는 "UserClicksStream"이라는 클래스를 생성합니다. 코드는 다음과 같습니다.

@Configuration
@EnableKafkaStreams
public class UserClicksStream {

   @Value("${spring.kafka.bootstrap-servers}")
   private String bootstrapServers;

   @Bean
   public KStream<String, String> kStream(StreamsBuilder builder) {

       KStream<String, String> stream = builder.stream("user-clicks");

       stream.foreach((key, value) -> {
           System.out.println("Received: " + value);
       });

       return stream;
   }

   @Bean
   public KafkaStreams kafkaStreams(StreamsBuilder builder) {
       Properties props = new Properties();
       props.put(StreamsConfig.APPLICATION_ID_CONFIG, "user-clicks-stream");
       props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
       return new KafkaStreams(builder.build(), props);
   }
}

위 코드에서는 Spring의 종속성 주입 기능을 사용하여 "StreamsBuilder"라는 StreamsBuilder 개체를 주입합니다. 이 개체는 Kafka 스트림 처리 토폴로지를 만드는 데 사용됩니다.

kStream 메서드에서는 "user-clicks" 주제에서 KStream 개체를 생성하고 foreach 메서드를 사용하여 수신된 이벤트를 인쇄합니다. froeach는 이후 단계에서 사용할 터미널 작업입니다.

kafkaStreams 메서드에서는 "user-clicks-stream"이라는 애플리케이션을 만들고 Kafka 서버의 주소를 지정합니다. 이 애플리케이션은 이전 토폴로지에서 정의한 스트림 처리 작업을 자동으로 수행합니다.

  1. 애플리케이션 실행

이제 애플리케이션의 모든 코드를 작성했습니다. 애플리케이션을 실행하기 전에 Kafka 서버를 시작해야 합니다.

명령줄에서 다음 명령을 실행하세요.

bin/kafka-server-start.sh config/server.properties

이렇게 하면 Kafka 서버가 시작됩니다. 이제 애플리케이션을 시작할 수 있습니다.

명령줄에서 다음 명령을 실행하세요:

mvn spring-boot:run

이렇게 하면 애플리케이션이 시작됩니다. 이제 cURL 또는 Postman과 같은 HTTP 클라이언트를 사용하여 애플리케이션에 POST 요청을 보낼 수 있습니다. 각 요청은 클릭 이벤트를 생성하고 이를 콘솔에 인쇄합니다.

토폴로지에서 더 많은 작업(예: 집계, 창 계산 등)을 수행하려는 경우 Kafka Streams API에서 제공하는 다른 작업을 사용하여 토폴로지를 구축할 수 있습니다.

  1. 요약

Spring Boot 및 Apache Kafka Streams를 사용하여 스트림 처리 애플리케이션을 구축하는 것은 실시간 데이터를 보다 쉽게 ​​처리하는 데 도움이 되는 빠르고 편리한 방법입니다. 그러나 토폴로지 설계, 버퍼 크기, 스트림 처리 시간 등과 같은 일부 최적화 성능 문제에 주의를 기울여야 합니다. 이러한 문제를 이해함으로써 효율적인 스트림 처리 애플리케이션을 더 잘 구축할 수 있습니다.

위 내용은 Spring Boot 및 Apache Kafka Streams를 사용하여 스트림 처리 애플리케이션 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.