Concepts

Concepts (개념)

Flink의 API를 이해하기 위한 기본 개념과 Flink의 아키텍처 및 런타임이 이를 어떻게 구현하는지 다룹니다. 상태(State) 기반 및 시간(timely) 기반 스트림 처리를 중심으로, Flink가 제공하는 여러 추상화 수준을 설명합니다.

출처: 문서

본문

Hands-on Training에서는 Flink의 API를 뒷받침하는 상태 기반·시간 기반 스트림 처리의 기본 개념을 설명하고, 이러한 메커니즘이 애플리케이션에서 어떻게 사용되는지 예시를 제공합니다. 상태 기반 스트림 처리는 Data Pipelines & ETL의 맥락에서 소개되며, Fault Tolerance 섹션에서 더욱 심화됩니다. 시간 기반 스트림 처리는 Streaming Analytics 섹션에서 소개됩니다.

Concepts in Depth 섹션에서는 Flink의 아키텍처와 런타임이 이러한 개념들을 어떻게 구현하는지에 대한 더 깊은 이해를 제공합니다.

Flink는 스트리밍/배치 애플리케이션을 개발하기 위한 서로 다른 수준의 추상화를 제공합니다.

  • 가장 낮은 수준의 추상화는 상태 기반·시간 기반 스트림 처리를 제공합니다. 이는 Process Function을 통해 DataStream API에 내장되어 있습니다. 이를 통해 사용자는 하나 이상의 스트림에서 이벤트를 자유롭게 처리할 수 있으며, 일관되고 장애 허용(fault tolerant)적인 상태를 제공받습니다. 또한 사용자는 이벤트 시간(event time) 및 처리 시간(processing time) 콜백을 등록하여 복잡한 계산을 실현할 수 있습니다.

  • 실제로 많은 애플리케이션은 위에서 설명한 저수준 추상화가 필요 없고, 대신 Core APIs(핵심 API)인 DataStream API(유계/무계 스트림)를 대상으로 프로그래밍합니다. 이러한 유연한 API는 데이터 처리의 공통 구성 요소(사용자 정의 변환, 조인, 집계, 윈도우, 상태 등)를 제공합니다. 이 API에서 처리되는 데이터 유형은 각 프로그래밍 언어의 클래스로 표현됩니다. 저수준 Process FunctionDataStream API와 통합되어, 필요에 따라 저수준 추상화를 사용할 수 있게 합니다.

  • Table API테이블을 중심으로 한 선언형 DSL(도메인 특화 언어)입니다. 테이블은 스트림을 표현할 때 동적으로 변하는 테이블(dynamically changing tables)일 수 있습니다. Table API는 (확장된) 관계형 모델을 따릅니다. 즉 테이블에는 스키마가 연결되어 있고(관계형 데이터베이스의 테이블과 유사), API는 select, project, join, group-by, aggregate 등과 같은 유사한 연산을 제공합니다. Table API 프로그램은 코드가 정확히 어떻게 생겼는지를 지정하는 대신, 어떤 논리적 연산이 수행되어야 하는지를 선언적으로 정의합니다. Table API는 다양한 사용자 정의 함수로 확장할 수 있지만, Core APIs보다 표현력이 떨어지고 사용하기에 더 간결합니다(작성할 코드가 적음). 또한 Table API 프로그램은 실행 전에 최적화 규칙을 적용하는 옵티마이저를 거칩니다. 테이블과 DataStream 사이를 매끄럽게 변환할 수 있어, 프로그램에서 Table APIDataStream API를 혼합할 수 있습니다.

  • Flink가 제공하는 가장 높은 수준의 추상화는 SQL입니다. 이 추상화는 의미론(semantics)과 표현력 모두 Table API와 유사하지만, 프로그램을 SQL 질의 표현식으로 나타냅니다. SQL 추상화는 Table API와 밀접하게 상호작용하며, Table API에서 정의된 테이블에 대해 SQL 질의를 실행할 수 있습니다.

더 알아보기 (Learn more)