Pinterest의 CDC 기반 DB 수집 파이프라인은 MySQL에서 Kafka, Flink, Spark, Iceberg를 거치는 다층 구조다. 스키마 변경이 생기면 모든 계층을 동시에 업데이트해야 해 드리프트, 배포 실패, 데이터 불일치가 반복됐다. Pinterest 엔지니어링 팀은 이를 해결하기 위해 가산적 변경만 자동화하는 스키마 진화 프레임워크를 구축하고, PR 기반 롤아웃과 SLA 기반 일관성 모델을 도입했다.
핵심 포인트- nullable 컬럼 추가와 제한적 숫자 타입 확장(additive 변경)만 자동화해 하위 호환성을 유지하고 히스토리 데이터 재처리를 피한다.
- 스키마 분기 → 코드 수렴(Flink 먼저, Spark 순차) → 데이터 수렴(백필)의 3단계 모델로 최종 일관성을 달성한다.
- push 기반(저지연) + pull 기반(안전망) 이중 탐지로 스키마 변경을 놓치지 않는다.
- Flink 배포 전 스테이징 검증을 의무화해 데이터 손실을 사전에 차단한다.
- default 값 컬럼, 민감 데이터, PK 변경 등 자동화 범위 밖의 엣지 케이스는 명시적 수동 인터벤션 절차로 처리한다.
상세 정리- 배경: Pinterest DB 수집 플랫폼은 CDC 기반으로 MySQL → Kafka → Flink → Iceberg 경로로 실시간 수집한다. 스키마 변경 시 모든 계층의 코드·설정을 동기화해야 해 운영 부담이 컸다.
- 가산적 변경만 지원: nullable 컬럼 추가, 제한적 숫자 타입 확장(예: INT → BIGINT)만 자동화한다. 컬럼 삭제나 타입 축소는 히스토리 재처리 없이 하위 호환성 유지를 위해 의도적으로 제외했다.
- PR 기반 롤아웃: 모든 스키마 변경은 PR로 제출되고, 버전 관리·감사 추적(audit trail)이 자동으로 기록된다.
- 3단계 수렴 모델 1단계(스키마 분기): Iceberg 스키마는 즉시 업데이트되고 기존 Flink·Spark 잡은 계속 실행된다.
- 3단계 수렴 모델 2단계(코드 수렴): Flink 잡 먼저 배포하고, Spark 잡을 순차 롤아웃한다.
- 3단계 수렴 모델 3단계(데이터 수렴): 백필 완료 후 온라인·오프라인 스키마가 일치 상태에 도달한다.
- 이중 탐지: push 기반(변경 이벤트 즉시 트리거, 저지연)과 pull 기반(주기적 폴링, 안전망)을 병행 운용해 한쪽 실패 시 나머지가 보완한다.
- SLA 기반 일관성: 완전 동기 방식이 아닌 설정된 SLA 기간 안에 모든 계층이 일치하면 성공으로 간주하는 eventual consistency 모델이다.
- 스테이징 검증: 새 Flink 코드는 프로덕션 배포 전 스테이징 환경에서 반드시 검증해 데이터 손실이나 싱크 오류를 사전에 발견한다.
- 모니터링: 파이프라인 상태, 스키마 일치 여부, 데이터 품질 신호 세 가지를 종합 추적한다.
- 엣지 케이스(default 값 컬럼): 기본값 있는 컬럼 추가 시 기존 행에 수동 백필이 필요해 자동화 범위 밖이며 별도 부트스트랩 절차를 따른다.
- 엣지 케이스(민감 데이터): 개인정보 등 민감 컬럼은 보안이 강화된 별도 파이프라인으로 라우팅하는 마이그레이션 절차를 따른다.
- 엣지 케이스(PK 변경): 기본 키 변경은 자동화 불가, 수동 인터벤션 옵션이 제공된다. 모호한 스키마 diff는 Skeema 분석과 감사 추적으로 해소한다.
- 향후 방향: 코드 배포 없이 스키마 업데이트를 즉시 적용하는 동적 Iceberg sink("제로 갭 스키마 진화")를 탐색 중이며 미지원 변경 타입은 dead-letter 큐로 라우팅한다.
왜 읽나Kafka·Flink·Spark·Iceberg 스택에서 CDC 기반 데이터 수집 파이프라인을 운영하며 스키마 변경 관리에 어려움을 겪는 데이터 엔지니어에게 실전에서 검증된 자동화 프레임워크 설계의 레퍼런스.