빅데이터 시대가 도래하면서 실시간 데이터 처리 및 분석 요구 사항을 충족하기 위해 스트림 처리 기술에 주목하는 기업이 점점 더 많아지고 있습니다. Apache Kafka는 스트림 처리 분야에서 사실상의 표준이 된 높은 처리량과 확장 가능한 분산 메시지 대기열 시스템입니다. Spring Boot는 Spring 애플리케이션을 신속하게 개발하기 위한 도구로, 스트림 처리 애플리케이션을 더 빠르고 쉽게 구축하는 데 도움이 됩니다. 이 기사에서는 Spring Boot와 Apache Kafka Streams를 사용하여 스트림 처리 애플리케이션을 구축하는 방법을 소개하고, 이 두 도구의 장점과 단점, 애플리케이션 성능을 최적화하는 방법에 대해 논의합니다.
애플리케이션 구축을 시작하기 전에 먼저 Kafka 주제를 만들어야 합니다. 이 글에서는 웹사이트에 사용자 클릭 이벤트를 저장하는 "user-clicks"라는 주제를 생성하겠습니다.
명령줄에서 다음 명령을 실행하세요.
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic user-clicks
이렇게 하면 하나의 파티션과 로컬 복사본만 있는 Kafka 서버에 "user-clicks"라는 주제가 생성됩니다.
다음으로 Spring Boot를 사용하여 기본 애플리케이션을 생성하겠습니다. Spring Boot에서는 Spring Initializr를 사용하여 기본 애플리케이션을 빠르게 생성할 수 있습니다. 애플리케이션을 생성할 때 다음 종속성을 선택해야 합니다.
애플리케이션을 생성한 후 다음 종속성을 추가합니다.
<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-streams</artifactId> <version>2.6.0</version> </dependency>
이것은 Kafka 스트림 처리 API를 제공합니다.
이제 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 주제에 메시지를 보내는 데 사용할 수 있습니다.
다음으로 "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 서버의 주소를 지정합니다. 이 애플리케이션은 이전 토폴로지에서 정의한 스트림 처리 작업을 자동으로 수행합니다.
이제 애플리케이션의 모든 코드를 작성했습니다. 애플리케이션을 실행하기 전에 Kafka 서버를 시작해야 합니다.
명령줄에서 다음 명령을 실행하세요.
bin/kafka-server-start.sh config/server.properties
이렇게 하면 Kafka 서버가 시작됩니다. 이제 애플리케이션을 시작할 수 있습니다.
명령줄에서 다음 명령을 실행하세요:
mvn spring-boot:run
이렇게 하면 애플리케이션이 시작됩니다. 이제 cURL 또는 Postman과 같은 HTTP 클라이언트를 사용하여 애플리케이션에 POST 요청을 보낼 수 있습니다. 각 요청은 클릭 이벤트를 생성하고 이를 콘솔에 인쇄합니다.
토폴로지에서 더 많은 작업(예: 집계, 창 계산 등)을 수행하려는 경우 Kafka Streams API에서 제공하는 다른 작업을 사용하여 토폴로지를 구축할 수 있습니다.
Spring Boot 및 Apache Kafka Streams를 사용하여 스트림 처리 애플리케이션을 구축하는 것은 실시간 데이터를 보다 쉽게 처리하는 데 도움이 되는 빠르고 편리한 방법입니다. 그러나 토폴로지 설계, 버퍼 크기, 스트림 처리 시간 등과 같은 일부 최적화 성능 문제에 주의를 기울여야 합니다. 이러한 문제를 이해함으로써 효율적인 스트림 처리 애플리케이션을 더 잘 구축할 수 있습니다.
위 내용은 Spring Boot 및 Apache Kafka Streams를 사용하여 스트림 처리 애플리케이션 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!