[java] 아파치 플링크의 스트리밍 API(Streaming API in Apache Flink)

아파치 플링크(Apache Flink)는 대규모 실시간 스트리밍 및 배치 데이터 처리를 위한 분산 처리 프레임워크입니다. 이 프레임워크는 데이터 스트림 처리를 위한 강력한 스트리밍 API를 제공합니다.

스트리밍 API 개요

스트리밍 API는 아파치 플링크에서 실시간 스트림 데이터 처리를 위한 핵심 기능을 제공합니다. 이 API를 사용하면 데이터 스트림을 처리하고 분석하는 다양한 연산을 수행할 수 있습니다.

스트리밍 API의 핵심 개념 중 하나는 DataStream입니다. DataStream은 무제한의 데이터 스트림을 나타내는 추상화된 데이터 형식입니다. 이 데이터 스트림은 시간 순서대로 계속해서 업데이트될 수 있으며, 사용자는 DataStream을 통해 연산을 적용하고 원하는 결과를 얻을 수 있습니다.

스트리밍 API 예제

다음은 아파치 플링크의 스트리밍 API를 사용한 예제 코드입니다:

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;

public class WordCount {

    public static void main(String[] args) throws Exception {

        // 아파치 플링크 실행 환경 생성
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // 데이터 스트림 생성
        DataStream<String> text = env.socketTextStream("localhost", 9999);

        // 공백을 기준으로 단어 분리하고 각 단어의 개수 계산
        DataStream<Tuple2<String, Integer>> counts = text
                .flatMap(new Tokenizer())
                .keyBy(0)
                .sum(1);

        // 결과 출력
        counts.print();

        // 아파치 플링크 실행
        env.execute("WordCount");
    }

    public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
        @Override
        public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
            // 공백을 기준으로 단어 분리
            String[] words = value.toLowerCase().split("\\s+");

            // 각 단어와 1로 이루어진 Tuple 생성
            for (String word : words) {
                if (word.length() > 0) {
                    out.collect(new Tuple2<>(word, 1));
                }
            }
        }
    }
}

이 예제는 소켓을 통해 들어오는 텍스트 데이터의 단어를 분리하고, 각 단어의 등장 횟수를 계산하는 WordCount 애플리케이션입니다. socketTextStream 메소드를 사용하여 데이터 스트림을 생성하고, Tokenizer 함수를 사용하여 입력 문자열을 단어로 분리합니다. 그리고 keyBysum 메소드를 사용하여 단어의 등장 횟수를 계산합니다. 마지막으로, 결과를 출력하고 아파치 플링크를 실행합니다.

참고 자료