데이터레이크 환경(특히 Iceberg/Hudi/Delta 같은 테이블 포맷 기반 레이크하우스)에서 Flink가 사실상 반드시 들어와야 하는 이유는 “실시간 처리”라는 성격 때문이다.
Flink가 Kafka → Iceberg를 이어주는 실시간 ingestion 엔진 역할을 함.
운영 DB의 트랜잭션 → 데이터레이크 테이블 동기화가 가능해짐.
데이터 품질을 보장하려면 Flink가 중간에서 조정자 역할.
실시간 로그 스트림을 “분석 가능한 시계열 테이블”로 변환.
Spark만으로는 ingestion 실시간성이 약하고, Kafka만으로는 테이블화가 불가. Flink가 꼭 필요.
단순 배치 적재 (예: 하루 1번, 10분 단위 로그 적재)는 Spark INSERT 충분하나 실시간 적재/분석 (예: Kafka 이벤트를 대시보드 1초 내 반영) 을 위해서는 Spark INSERT는 한계가 있기 때문에 Flink가 필요하다. 일반적으로 Spark는 Batch ETL / 대규모 처리용, Flink는 실시간 Ingestion/CDC용 으로 역할을 분리한다.
Spark는 Micro-batch/Batch 엔진 → 기본적으로 “한번에 많은 데이터를 처리”하는 데 최적화.
INSERT 시 동작 흐름:
Spark INSERT는 배치 단위 commit → commit 완료 시점에만 테이블이 갱신됨.
Latency
- Spark는 job 실행 + shuffle + 파일 commit 과정 때문에 수 초~수 분 단위 지연 발생.
- Flink는 수 ms~초 단위로 반영 가능.
Continuous ingest 부적합
- Spark Structured Streaming도 있긴 하지만, micro-batch 방식이라 near real-time 수준.
- Flink의 continuous streaming과 비교하면 밀리초 단위에서는 따라가기 어려움.
Update/Delete/CDC 반영 어려움
- Spark Insert는 append 중심 → CDC 처리 시 복잡한 MERGE INTO job 필요.
- Flink는 CDC 이벤트를 바로 upsert 처리 가능.
데이터 파이프라인의 성격에 따라 선택지가 달라진다. Flink는 무조건 써야 하는 건 아니지만, 실시간 데이터 레이크(Iceberg/Hudi/Delta) 구축이라면 → Flink가 사실상 표준 선택지가 된다.
실시간 집계 / 분석
- 예: 최근 5분간 주문 수 / 사용자별 세션 집계 / 이벤트 시간 기반 윈도우
- 단순 소비로는 구현이 어렵고 Flink 같은 스트리밍 엔진 필요
Exactly-once 보장 필요
- 금융/결제/로그 분석처럼 중복/유실 없는 데이터가 필수일 때
- Kafka Consumer만으로는 구현이 매우 까다롭지만 Flink는 내장
다양한 Sink 연동
- Kafka → Iceberg / Hudi / Delta / Elastic / JDBC 같은 데이터 레이크·DB 저장
- Flink는 커넥터로 쉽게 처리
CDC(Change Data Capture) 파이프라인
- Debezium + Flink CDC로 RDB → Iceberg/Hudi 같은 실시간 테이블 동기화
- Kafka Consumer로는 CDC 이벤트 해석/머지 로직을 직접 구현해야 함
운영/확장성
- 수십~수백 파티션, 수십억 건 데이터 실시간 처리
- Flink는 체크포인트·세이브포인트·클러스터 확장 기능 제공
단순 메시지 소비 → 저장
- Kafka → DB insert, Kafka → S3 dump
- Latency와 중복 크게 중요하지 않을 때
소규모 파이프라인
- 데이터량 적고, consumer 그룹만으로 충분히 확장 가능한 경우
운영 복잡성을 피하고 싶을 때
- Flink 클러스터 운영 부담이 크고, 팀 역량이 아직 스트리밍 운영에 익숙하지 않을 때
Kafka의 일반 소비자(Consumer API) 를 직접 쓰는 것과, Flink를 Kafka 소비자로 사용하는 것은 접근 방식이 꽤 다르다.
Kafka Consumer만 쓰면 “메시지 큐 소비” 수준에서 끝난다. (주로 단순 ETL or microservice event 처리 용도)
Flink를 Kafka Consumer로 쓰면 “스트리밍 데이터 처리 엔진”이 되어,
실시간 집계, 상태 기반 처리, 이벤트 시간 기반 정렬/윈도우, Exactly-once 보장, 다양한 데이터 레이크/DB Sink와 연동이 가능해진다. 이런 고급 기능들을 Kafka → (Flink 처리) → Iceberg/DB 형태로 바로 이어갈 수 있다.
📌 Flink를 Kafka Consumer로 사용할 때의 장점
| 구분 | Kafka Consumer 직접 사용 | Flink + Kafka Connector |
|---|---|---|
| Offset 관리 | 개발자가 직접 commit 제어 | Flink Checkpoint/Savepoint로 자동 관리 (장애 복구 시 정확한 위치 복원) |
| 처리 보장 | 보통 At-least-once (Exactly-once 구현은 복잡) | Exactly-once / At-least-once 선택 가능 |
| 상태 관리 | 개발자가 Redis/DB 등에 직접 저장 | Flink의 State Backend (RocksDB, Memory, FileSystem, S3) 자동 관리 |
| 스트리밍 연산 | 수동 구현 필요 (window, join, agg) | Flink SQL/DSL로 네이티브 지원 |
| CDC / Upsert | 직접 구현 필요 | Flink Table/SQL에서 UPSERT, MERGE INTO 가능 |
| Sink 다양성 | 직접 구현 (DB, S3, HDFS, Iceberg 등) | Connector 제공 (Iceberg, Hudi, Delta Lake, Elastic, JDBC 등) |
| 확장성 | Consumer Group으로 scale-out은 가능 | Flink 병렬성 + Operator 기반 확장 (Kafka만이 아닌 end-to-end 확장) |
| 장애 복구 | 수동 offset reset 필요 | Checkpoint/Savepoint로 자동 재처리 |
| 운영 편의성 | 단순하지만 관리 포인트 많음 | Job 단위 관리 (Flink UI, Metrics, Alert 연동) |
Trino(구 PrestoSQL)는 "읽기(쿼리 엔진)" 중심 아키텍처라서, INSERT 같은 쓰기 작업에서는 몇 가지 제약과 문제가 생긴다. Trino를 쓰기 파이프라인 도구로 쓰면 운영상 문제 많고, 읽기 전용 쿼리 엔진으로만 쓰는 게 맞다.
StarRocks는 MPP 기반 OLAP 데이터베이스이고, Trino는 분산 SQL Query Engine이라 성격이 다르다.
장점
단점
- 데이터 소스 통합 약화: Trino는 다양한 소스를 federated query(데이터 가상화)로 접근 가능하지만, StarRocks는 주로 자체 테이블+연결자 수준.
- Lakehouse 친화성 부족: Iceberg/Hudi/Delta 연동은 발전 중이지만, Trino만큼 범용적이지 않음.
- 운영 복잡성: OLAP DB이므로 스토리지 관리 + 클러스터 운영 책임이 필요.
- 커뮤니티 생태계: Trino에 비해 상대적으로 신규(2020년 이후 급성장), 운영사례가 적음.
Flink는 스트리밍/CDC ingest 엔진으로, Trino나 StarRocks와 보완 관계.
장점
실시간 데이터 처리: Kafka, MySQL/Postgres CDC, Debezium 등과 연동 → Iceberg/Hudi/Delta에 실시간 Append 가능.
Exactly-once 보장: Spark보다 정교한 상태 관리(State)와 체크포인트.
SQL 기반 스트리밍: Flink SQL로 ETL 파이프라인 작성 가능.
Lakehouse 연동: Iceberg/Hudi/Delta에 실시간 commit → 이후 Trino/StarRocks에서 조회 가능.
단점
운영 복잡성: Flink Cluster 운영은 Spark보다 복잡(체크포인트, savepoint, HA 관리 필요).
러닝 커브: 배치+스트리밍 융합 개념(Flink SQL, DataStream API)이 낯설 수 있음.
BI 직접 연결 어려움: Flink는 데이터 저장소가 아니라 파이프라인 엔진 → 조회용으로 바로 쓰기는 불가.
카프카/CDC 의존성: Flink만으로는 소스→싱크 스트리밍이 안 되고, Kafka/DB CDC 준비가 필요.
Trino + Flink
- Flink: 실시간 ingest (CDC → Iceberg/Hudi)
- Trino: 데이터 소스 통합 + 분석 쿼리
장점: 데이터 가상화 + 실시간 ingest 조합
단점: Insert 성능은 여전히 Trino 한계
- StarRocks + Flink
- Flink: CDC ingest (DB/Kafka → StarRocks)
- StarRocks: 초저지연 조회 + BI
장점: 진짜 Real-time OLAP 가능 (millisecond 단위 쿼리)
단점: Trino처럼 다양한 소스 통합 쿼리는 약함