본문 바로가기
어플리케이션

실시간 레이크하우스의 핵심 Apache Paimon 에 대해 알아보겠습니다.

by forward error correction Circle 2026. 4. 24.
반응형

Ⅰ. Apache Paimon이란?

 실시간 레이크하우스 아키텍처를 구현하기 위한 오픈소스 테이블 포맷(Lake Format)입니다. 기존의 Iceberg, Delta Lake가 주로 배치 처리에 최적화된 것과 달리, Paimon은 LSM(Log-Structured Merge-tree) 구조를 채택하여 대규모 실시간 업데이트와 분석을 하나의 저장소에서 동시에 처리합니다.

★ 핵심 가치
실시간 CDC(Change Data Capture)와 스트리밍 Upsert를 통해 OLAP 분석과 실시간 데이터 처리를 단일 저장소로 통합합니다. 더 이상 Lambda 아키텍처의 복잡성과 씨름할 필요가 없습니다.

기존 아키텍처 vs Paimon 아키텍처

기존
(분리된 배치 + 스트리밍)
Paimon — 통합 레이크하우스
배치 레이어 (Hive/Iceberg)
+ 별도 관리
스트리밍 레이어 (Kafka)
Apache Paimon
배치 + 스트리밍 통합

 

Ⅱ. Apache Paimon 주요 특징

 쓰기 성능과 읽기 일관성 사이의 균형을 정밀하게 설계한 기술입니다. 아래 네 가지 핵심 특징이 Paimon을 경쟁 기술과 차별화합니다.

구분 설명
실시간 Upsert Primary Key 기반 고속 갱신
초당 수십만 건의 대규모 Insert/Update/Delete를 안정적으로 처리
엔진 호환성 멀티 엔진 연동
Flink, Spark, Trino, Presto, Hive 등 주요 처리 엔진과 네이티브로 연동
자동 관리 운영 부하 최소화
자동 컴팩션, 스키마 진화, TTL(데이터 자동 삭제)로 DBA 개입을 줄입니다.
ACID 보장 트랜잭션 일관성
스냅샷 기반 ACID 트랜잭션으로 데이터 일관성과 Time Travel을 지원

Ⅲ. Apache Paimon 동작 방식 : LSM 트리 기반 레이크 포맷

Paimon의 핵심은 LSM(Log-Structured Merge-tree)입니다. 쓰기 시 데이터를 레벨별로 누적하고, 백그라운드 컴팩션으로 읽기 성능을 최적화합니다. 데이터가 레벨을 거칠수록 점점 병합되어 최적화된 형태가 됩니다.

1. Write (쓰기) — 키별로 데이터를 LSM Level 0에 추가합니다. 순차 쓰기이므로 디스크 I/O가 최소화되고 처리 속도가 빠릅니다.
2. Compaction (병합) — 백그라운드에서 레벨 간 파일을 병합합니다. 작은 파일 수를 줄여 읽기 성능을 점진적으로 개선합니다.
3. Snapshot (스냅샷) — 매 커밋마다 스냅샷을 생성합니다. ACID 트랜잭션을 보장하며 특정 시점의 일관된 데이터를 조회(Time Travel)할 수 있습니다.
4. Changelog (변경 이력) — CDC 기능으로 INSERT/UPDATE/DELETE 변경 내역을 실시간으로 다운스트림 시스템에 전파합니다.

Ⅳ. Apache Paimon 아키텍처 구성 및 흐름도

 독립 클러스터 없이 컴퓨팅 엔진(Flink, Spark 등)에 플러그인 형태로 내장됩니다. 별도 서버 구성 없이 JAR 파일 하나로 동작하므로 운영 복잡도가 낮습니다.

 

Ⅴ. Apache Paimon 설치 방법

기존 Flink 또는 Spark 환경에 JAR 파일 하나를 추가하는 방식으로 설치합니다. 별도 데몬이나 서버 설정이 필요하지 않습니다.

전제 조건: Flink 1.16+ 또는 Spark 3.3+, Java 8 / 11


ⅰ. Flink 환경 설치

# 1. Paimon JAR 다운로드
wget https://repo1.maven.org/maven2/org/apache/paimon/paimon-flink-1.20_2.12/0.9.0/paimon-flink-1.20_2.12-0.9.0.jar

# 2. Flink lib 디렉토리에 복사
cp paimon-flink-*.jar $FLINK_HOME/lib/

# 3. Flink 재시작 (이미 실행 중인 경우)
$FLINK_HOME/bin/stop-cluster.sh
$FLINK_HOME/bin/start-cluster.sh


ⅱ. Spark 환경 설치

# Maven에서 Spark용 Paimon JAR 다운로드
wget https://repo1.maven.org/maven2/org/apache/paimon/paimon-spark-3.5_2.12/0.9.0/paimon-spark-3.5_2.12-0.9.0.jar

# spark-submit 사용 시 --jars 옵션으로 추가
spark-submit --jars paimon-spark-*.jar your_app.py

Ⅵ. Apache Paimon 사용 방법(SQL)

표준 SQL 인터페이스를 통해 직관적으로 조작할 수 있습니다. Flink SQL에서 Catalog를 생성하고 테이블을 정의하면 즉시 사용 가능합니다.

① Catalog 및 테이블 생성

-- Paimon Catalog 생성 (파일 시스템 기반)
CREATE CATALOG my_catalog WITH (
  'type' = 'paimon',
  'warehouse' = 'file:///tmp/paimon'
);
USE CATALOG my_catalog;

-- Primary Key 테이블 생성
CREATE TABLE sales (
  order_id  STRING,
  product   STRING,
  amount    BIGINT,
  PRIMARY KEY (order_id) NOT ENFORCED
) WITH ('connector' = 'paimon');


② 쓰기 / 배치 읽기 / CDC 스트리밍 읽기

-- 실시간 Upsert 쓰기
INSERT INTO sales VALUES ('ORD-001', 'laptop', 1000);

-- 일반 배치 읽기
SELECT * FROM sales;

-- Time Travel: 특정 스냅샷 시점 조회
SELECT * FROM sales /*+ OPTIONS('scan.snapshot-id'='1') */;

-- CDC 스트리밍 읽기 (변경 이벤트 실시간 구독)
SELECT * FROM sales /*+ OPTIONS('scan.mode'='changelog') */;

 

Ⅶ. Apache Paimon 자주 쓰는 명령어

실무에서 자주 사용하는 Paimon SQL 명령어를 목적별로 정리했습니다.

명령어 설명
SHOW SNAPSHOTS 테이블의 모든 스냅샷 목록을 조회합니다. Time Travel의 출발점입니다.
CALL sys.compact()  수동으로 컴팩션을 즉시 실행합니다. 파일 수가 많아 읽기가 느려질 때 사용합니다.
CALL sys.expire_snapshots()  오래된 스냅샷을 삭제하여 스토리지를 절약합니다.
ALTER TABLE ... SET 테이블 옵션(TTL, 컴팩션 주기 등)을 런타임에 변경합니다.
SHOW CREATE TABLE 테이블의 DDL과 현재 옵션 설정 전체를 출력합니다.
TRUNCATE TABLE 테이블 데이터를 모두 삭제합니다. 스키마와 Catalog 항목은 유지됩니다.
scan.snapshot-id 힌트로 특정 스냅샷 ID를 지정하여 과거 시점 데이터를 조회합니다.


Ⅷ. Apache Paimon 활용 방안

 실시간성과 대규모 분석이 동시에 요구되는 영역에서 특히 강점을 발휘합니다.

 

ⅰ. 실시간 데이터 웨어하우스
Kafka CDC 데이터를 Flink로 수집하고 Trino로 즉시 분석합니다. T+1 배치 없이 현재 상태를 실시간으로 조회합니다.
ⅱ. Time Travel & 감사
과거 특정 시점의 데이터 상태를 스냅샷으로 조회합니다. 장애 복구, 규제 감사, 데이터 품질 검증에 활용합니다.
ⅲ. ML 피처 스토어
실시간으로 갱신되는 사용자 행동 데이터를 모델 학습용 피처로 즉시 제공합니다. 피처 신선도를 최대화합니다.
ⅳ. 이커머스 실시간 운영
주문, 재고, 배송 상태를 초 단위로 갱신하고 분석합니다. 재고 소진 예측과 실시간 대시보드에 최적입니다.

반응형