[java] Kafka Streams와 스트림 처리 시스템 구성 방법

목차

Kafka Streams 소개

Kafka Streams는 Apache Kafka를 기반으로 하는 경량화된 스트림 처리 라이브러리입니다. Kafka Streams를 사용하면 데이터 스트림을 실시간으로 처리하고 변환하는 애플리케이션을 쉽게 구축할 수 있습니다. Kafka Streams는 선언적인 API를 제공하여 개발자가 코드를 작성해야하는 번거로움을 줄여줍니다.

스트림 처리 시스템 구성 방법

스트림 처리 시스템을 구성하기 위해서는 몇 가지 단계를 거쳐야 합니다.

1. Apache Kafka 설치

Kafka Streams를 사용하기 위해서는 먼저 Apache Kafka를 설치해야 합니다. Kafka는 대용량의 데이터 스트리밍을 처리하기 위한 분산 메시지 큐로 활용됩니다.

2. 데이터 토픽 생성

Kafka에는 데이터를 저장하기 위한 토픽을 미리 생성해야 합니다. 이 토픽은 데이터를 생성하고, 소비하는 데 사용됩니다.

3. 프로듀서 생성

데이터를 생성하고 Kafka 토픽에 저장하기 위해서는 프로듀서를 생성해야 합니다. 프로듀서는 데이터를 생성하여 Kafka 브로커에 전송하는 역할을 수행합니다.

4. 컨슈머 생성

데이터를 처리하고 변환하기 위해서는 컨슈머를 생성해야 합니다. 컨슈머는 Kafka 토픽에서 데이터를 소비하는 역할을 수행합니다.

5. Kafka Streams 애플리케이션 생성

Kafka Streams를 사용하여 데이터 스트림을 처리하고 변환하는 애플리케이션을 생성해야 합니다. 애플리케이션은 데이터를 소비하고, 처리하며, 결과를 생성하는데 사용됩니다.

Kafka Streams 예시 코드

아래는 Kafka Streams를 사용하여 단어를 소문자로 변환하는 예시 코드입니다.

import org.apache.kafka.streams.KafkaStreams;
import org.apache.kafka.streams.StreamsBuilder;
import org.apache.kafka.streams.kstream.KStream;
import org.apache.kafka.streams.kstream.Printed;
import java.util.Properties;

public class WordToLowercase {
    public static void main(String[] args) {
        // Kafka Streams 애플리케이션의 구성 속성
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("application.id", "word-to-lowercase");

        // 스트림 빌더 생성
        StreamsBuilder builder = new StreamsBuilder();

        // 입력 토픽을 스트림으로 생성
        KStream<String, String> inputStream = builder.stream("input-topic");

        // 각 단어를 소문자로 변환
        KStream<String, String> lowercaseStream = inputStream.mapValues(String::toLowerCase);

        // 변환된 결과를 출력 토픽에 전송
        lowercaseStream.to("output-topic");

        // Kafka Streams 애플리케이션 실행
        KafkaStreams streams = new KafkaStreams(builder.build(), props);
        streams.start();

        // 애플리케이션 종료 시 정리 작업 수행
        Runtime.getRuntime().addShutdownHook(new Thread(streams::close));
    }
}

위의 코드는 “input-topic”으로부터 입력 데이터를 소비하여 각 단어를 소문자로 변환한 후 “output-topic”에 전송합니다. Kafka Streams 애플리케이션은 “bootstrap.servers”에 지정된 Kafka 브로커에 연결되고, “application.id”에 지정된 식별자로 실행됩니다.

Kafka Streams를 사용하면 이와같이 간단하게 데이터 스트림을 처리하고 변환하는 애플리케이션을 구성할 수 있습니다.

참고 자료