
데이터는 이제 한곳에 저장되어 머무르지 않는다. 센서, 사용자 클릭, 앱 로그, 금융 거래처럼 다양한 소스에서 끊임없이 생성되며 계속 흘러간다.Apache Flink는 이러한 데이터가 도착하는 즉시 처리할 수 있도록 설계된 실시간 분산 처리 엔진이다. 현대적인 실시간

Batch Processing은 데이터가 모두 준비된 시점에 한 번에 처리하는 방식이다. 일정 기간 동안 축적된 데이터를 기반으로 작업이 수행되며, 대표적인 사례로 하루 동안 저장된 판매 데이터를 자정에 요약하는 작업이 있다. 이 방식은 데이터가 완전하게 확보된 이후

1. Overview Flink는 “스트림 중심 분산 처리 엔진”이다. 단일 머신이 아니라 여러 노드가 협력해 실시간으로 데이터를 처리한다. 그래서 단순히 코드를 실행하는 게 아니라, 클러스터 전체의 CPU와 메모리를 어떻게 나눠 쓰고 조율할지가 중요하다. Flink

Flink 애플리케이션은 기본적으로 두 가지 방식으로 실행된다. 하나는 클러스터를 미리 띄워 두고 여러 작업을 계속 올리는 방식이고, 다른 하나는 작업마다 전용 클러스터를 만드는 방식이다.Session Cluster는 클러스터를 먼저 띄워 두고, 여러 잡을 그 위에서

Apache Flink는 실시간 데이터 처리를 위한 스트림 엔진이다. Flink 프로그램은 Java 기반 DataStream API를 사용해 작성하며, 연산자(operator)들을 연결해 데이터 흐름을 구성한다. 이 글에서는 가장 기본적인 스트림 예제인 WordCoun

앞선 글에서는 Flink DataStream API를 사용해 WordCount 프로그램을 작성하고 shadowJar로 실행 JAR을 생성하였다. 이번 글에서는 Docker 기반으로 Flink 로컬 클러스터를 구성하고, 1편에서 생성한 JAR을 Web UI를 통해 제출하

스트림 처리 시스템은 데이터가 끊임없이 들어오기 때문에, “지금 어떤 계산을 하고 있으며 어디까지 처리했는가”를 항상 기억해야 한다. Apache Flink에서는 이러한 정보가 모두 State(상태) 로 관리된다. 집계 결과의 중간값, 윈도우에 쌓여 있는 이벤트, 등록

스트림 처리에서는 상태가 계속 쌓이기 때문에, Flink는 이 상태를 어떻게 저장하고 관리할지를 명확하게 정해야 한다. 이를 결정하는 구성 요소가 State Backend이다. Backend는 상태를 메모리에 둘지 디스크에 둘지, 어떤 포맷으로 저장할지, Checkpo
Flink의 상태는 관리 범위에 따라 Keyed State와 Operator State로 구분된다.Keyed State는 keyBy 기준으로 분리되어 각 key마다 독립적으로 관리되는 상태이며, Operator State는 연산자 인스턴스 단위로 관리되는 상태이다.Ke
Apache Flink는 분산 스트림 처리 시스템으로, 작업을 하나의 프로세스에서 실행하는 방식이 아니라 클러스터에 분산 배치하여 병렬로 처리한다. 이를 위해 Flink 클러스터는 작업을 계획하고 관리하는 컴포넌트와 실제 데이터를 처리하는 컴포넌트로 구조가 명확히 분
Flink 클러스터는 실행 환경과 운영 방식에 따라 여러 방식으로 배포할 수 있다. 배포 방식에 따라 JobManager와 TaskManager의 실행 위치, 리소스 관리 주체, 확장 방식이 달라진다. 대표적으로 Standalone 모드와 Kubernetes 기반 배포
사용자 코드는 제출 즉시 실행되지 않는다. Flink는 먼저 코드를 분석해 실행 계획을 생성하고, 이를 병렬 실행 단위로 확장한 뒤 클러스터 자원에 배치한다. 흐름은 다음과 같다.사용자 코드가 JobGraph로 변환된다병렬도가 적용되어 ExecutionGraph로 확장
Apache Flink에서 Task Slot은 태스크가 실제로 실행되는 실행 단위이다. 하나의 TaskManager는 여러 개의 Slot을 가지며, JobManager는 태스크를 TaskManager 자체가 아니라 Slot 단위로 배치한다. 이 때문에 Slot은 Fli
Apache Flink의 스트림 처리는 병렬도(parallelism)와 window 설정에 따라 여러 Task Slot에서 동시에 수행된다. 각 태스크는 독립적으로 실행되며, 처리 중간 결과는 다른 태스크로 전달된다. 이로 인해 태스크 간 데이터 전송 메커니즘은 Fli
스트림 처리에서 시간(Time)은 매우 중요한 개념이다. 어떤 시간을 기준으로 연산을 수행하느냐에 따라 결과가 완전히 달라진다. Apache Flink는 이러한 문제를 해결하기 위해 시간을 Event Time, Ingestion Time, Processing Time으