Flink API 개요

Apache Flink는 스트리밍 및 배치 애플리케이션을 구축하기 위한 두 가지 주요 API를 제공해요. 바로 Table APIDataStream API인데, 두 API 모두 Java, Scala, Python으로 사용할 수 있어요. 선언적(declarative) 방식부터 명령적(imperative) 방식까지 폭넓은 선택지를 제공하므로, 사용 사례에 맞는 API를 고를 수 있어요.

출처: 문서

본문

올바른 접근 방식 선택하기

Flink는 완전히 선언적인 프로그래밍부터 완전히 명령적인 프로그래밍까지의 스펙트럼을 제공해요.

접근 방식 설명 사용 시점
선언적 (SQL / Table API) 내장된 관계형 연산자 표준 ETL, 분석, 조인, 집계
+ 사용자 정의 함수 (UDF) 선언적 파이프라인 내 사용자 정의 함수 내장 함수만으로 충분하지 않을 때
+ 상태 및 타이머 (PTFs) 특정 연산을 위한 저수준 제어 Table 파이프라인 내 이벤트 기반 패턴, 상태/타이머
명령적 (DataStream API) 전체 애플리케이션에 대한 완전한 제어 상태, 윈도우, 처리 로직에 대한 완전한 제어

선언적으로 시작하기

대부분의 사용 사례에서는 SQL이나 Table API로 시작하는 것이 좋아요.

  • Flink가 쿼리를 자동으로 최적화해요
  • 조인, 집계, 윈도우 같은 일반적인 패턴을 내장 연산자가 처리해요
  • MATCH_RECOGNIZE를 통해 패턴 매칭을 사용할 수 있어요.

필요할 때 확장하기

내장 기능만으로 부족할 때는 다음을 사용할 수 있어요.

  • User-Defined Functions (UDF): 사용자 정의 스칼라, 테이블, 집계 함수를 추가해요
  • ProcessTableFunction: Table API 안에 머물면서 파이프라인의 특정 부분에 대한 상태와 타이머에 접근해요

완전한 제어를 위해 명령적으로 가기

DataStream API는 Flink의 실행 모델에 대한 세밀한 제어를 제공하지만, 상태 관리, 연산자 체이닝, 직렬화를 이해해야 해요. Table API로 해결할 수 없는 특정 요구사항을 가진 숙련된 사용자에게 적합해요.

다음과 같은 경우 DataStream API를 사용하세요:

  • 전체 애플리케이션을 명령적으로 구축하고 싶을 때
  • 사용 사례가 관계형/테이블 추상화에 맞지 않을 때
  • Table API가 노출하지 않는 측면을 제어해야 할 때

API 비교

Table API DataStream API
패러다임 선언적 (무엇을 계산할지) 명령적 (어떻게 계산할지)
추상화 테이블에 대한 관계형 연산 스트림 변환
최적화 자동 쿼리 최적화 수동 최적화
상태 관리 자동 (사용자 정의 상태는 ProcessTableFunction 사용) 수동 (세밀한 제어)
SQL 통합 완전한 SQL 지원 제한적

API 혼합하기

Table API와 DataStream API는 함께 사용할 수 있어요. 다음과 같은 것이 가능해요.

  • 관계형 연산을 위해 DataStream을 Table로 변환
  • 저수준 처리를 위해 Table을 DataStream으로 다시 변환
  • DataStream 애플리케이션 안에서 SQL 사용

자세한 내용은 DataStream API Integration 문서를 참고하세요.

다음으로 어디로 갈까요?

  • Table API: 관계형 연산을 위한 선언적 API
  • DataStream API: 스트림 처리를 위한 명령적 API
  • Configuration: 프로젝트 설정 및 의존성

시작하기 튜토리얼

  • Flink SQL Tutorial: SQL로 시작하기 (프로그래밍 불필요)
  • Table API Tutorial: Table API로 스트리밍 파이프라인 구축하기
  • DataStream API Tutorial: DataStream API로 이벤트 기반 애플리케이션 구축하기

더 알아보기 (Learn more)