Apache Flink

Apache Flink를 통한 분산 스트림 처리 소개

Posted by Start Bootstrap on November 19, 2020

Data Steam Framework

현대의 응용 프로그램은 수 많은 데이터를 생산하고 사용합니다. 기존에는 전통적으로 데이터를 저장하고 나중에 일괄적으로 처리하는 방식을 사용했습니다. 하지만 많은 데이터의 실시간 처리가 중요해져서 더 이상 기존 방식은 좋은 방법이 아닙니다. 이를 위해서는 실시간 스트림 프로세서를 사용하여 더 많은 스트림 기반으로 애플리케이션의 데이터를 처리 해야 합니다. 따라서 이러한 기능을 제공하는 여러 프레임 워크가 있습니다. 그중 하나인 Apache Flink는 상태 저장, 대규모 분산 및 내결함성 스트림 처리를위한 오픈 소스 프레임 워크 입니다. Apache Flink의 DataStream API를 통해 제공하는 기능을 사용할 수 있습니다.

Apache Flink

Apache Flink는 대량의 스트리밍 데이터를 수집하고 여러 노드에서 분산 방식으로 처리 할 수 ​​있습니다. 그래서 Apachek Flink 파이프 라인의 기본 기능은 입력 및 출력의 처리입니다. 그리고 fault-tolerant으로 지연이 적은 처리를 할 수 있습니다. Flink는 스트리밍 데이터에 대한 실시간 데이터 분석을 가능하게하며 스트리밍 데이터의 Extract-Transform-Load기능으로 파이프 라인과 이벤트 기반 애플리케이션에도 적합합니다. 에러가 발생하는 경우에도 비동기로 체크하여 상태를 저장하여 복구할 수 있는 기능을 제공합니다.

Data Stream

Apache Flink의 기본 요소는 Stream와 Transformations 입니다. Stream은 말 그대로 Data Record의 흐름입니다. Transformations는 일반적으로 입력과 하나 이상의 출력의 Stream으로 구성되어 있습니다.

        
                val env = ExecutionEnvironment.getExecutionEnvironment

                val text = env.fromElements("To be, or not to be,--that is the question:--",
                "Whether 'tis nobler in the mind to suffer", "The slings and arrows of outrageous fortune",
                "Or to take arms against a sea of troubles,")

                val counts = text.flatMap { _.toLowerCase.split("\\W+") } // Transformations
                .map { (_, 1) }
                .groupBy(0)
                .sum(1)
        
    

Transformations는 때때로 위의 예시처럼 하나 이상의 Transform Operator로 구성될 수 있습니다. 그리고 Apache Flink에서는 이러한 것들이 병렬적으로 처리할 수 있습니다.

작성중....