[java] 자바로 카프카와 함께하는 스트림 처리 애플리케이션 개발하기

카프카는 대용량의 실시간 데이터 스트림을 처리하기 위한 분산 스트리밍 플랫폼으로서 많은 기업이 사용하고 있습니다. 자바로 카프카와 함께하는 스트림 처리 애플리케이션을 개발하는 방법을 알아보겠습니다.

카프카 스트리밍 아키텍처

카프카 스트리밍은 데이터 처리를 위해 크게 두 가지 구성 요소로 구성됩니다.

카프카 스트림 처리 애플리케이션 개발하기

자바로 카프카 스트림 처리 애플리케이션을 개발하기 위해서는 먼저 아파치 카프카 클라이언트를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음과 같이 종속성을 추가할 수 있습니다.

<dependencies>
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>${kafka.version}</version>
    </dependency>
</dependencies>

애플리케이션에서 카프카를 사용하기 위해 필요한 설정을 구성해야 합니다. 예를 들어, 브로커 호스트와 포트를 설정하고, 프로듀서 및 컨슈머에 필요한 속성을 설정할 수 있습니다.

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

스트림 처리 애플리케이션을 개발하기 위해 Kafka Streams 라이브러리를 사용할 수 있습니다. Kafka Streams는 고수준 API로 스트리밍 데이터 처리를 쉽게 할 수 있도록 지원합니다.

아래는 간단한 Word Count 애플리케이션의 예입니다.

KStreamBuilder builder = new KStreamBuilder();

KStream<String, String> source = builder.stream("input-topic");
KTable<String, Long> wordCounts = source
    .flatMapValues(value -> Arrays.asList(value.toLowerCase().split("\\W+")))
    .groupBy((key, value) -> value)
    .count("Counts");

wordCounts.to("output-topic");

final KafkaStreams streams = new KafkaStreams(builder, props);
streams.start();

위의 코드는 “input-topic”에서 데이터를 읽어와서 단어별로 카운트하고, 결과를 “output-topic”으로 출력합니다.

결론

이제 자바로 카프카와 함께하는 스트림 처리 애플리케이션 개발하는 방법을 알아보았습니다. 이를 토대로 실시간 데이터 스트림을 처리하는 애플리케이션을 개발할 수 있습니다. 자세한 내용은 카프카 공식 문서를 참고하시기 바랍니다.

참고 자료: