토스증권 Iceberg 적용기 #1: CDC 환경은 왜 제대로 동작하지 않을까?
김용우 · 토스 · 토스 기술 블로그
소개
CDC를 Iceberg에 어떻게 안전하게 적재할 수 있는지에 초점을 맞춰, 우리가 마주했던 문제와 원칙들을 공유합니다.
AI 핵심 요약
토스증권은 잦은 Update/Delete가 발생하는 CDC 파이프라인에서 Iceberg 데이터가 중복되는 정합성 문제를 겪었습니다. Iceberg의 COW·MOR 방식과 Position Delete·Equality Delete의 Data Sequence Number 적용 규칙을 분석해, 같은 Commit 안의 변경은 이전 Row를 Position Delete로 지워야 한다는 원칙을 세웠습니다. Databricks Iceberg Sink Connector에서 파티션 분산, Commit Timeout, Schema Evolution이 `insertedRowMap`을 초기화하거나 공유하지 못하게 해 이 원칙을 깨뜨리는 경로를 찾아, Kafka 키 설정과 preCommit 단계, 별도 Registry로 대응했습니다. 그 결과 Iceberg를 준실시간 CDC 적재와 Upsert·History·Delete-only 테이블에 활용하고, 저장소 수준의 중복 제거에도 사용할 수 있게 됐습니다.
- MOR은 쓰기 비용을 낮추지만 Delete File이 쌓이면 읽기 성능이 저하되므로 컴팩션 계획도 함께 세워야 합니다.
- Kafka에서 같은 키의 이벤트 순서를 보장하려면 레코드 키를 Iceberg의 식별자 컬럼으로 설정해 같은 파티션에 보내야 합니다.
- Commit 경계와 Writer 수명 주기를 점검해, 파일이 다음 Commit으로 넘어가거나 Writer가 교체돼도 삭제 위치 정보가 유지되는지 확인하세요.
- Equality Delete는 같은 Data Sequence Number의 새 파일에는 적용되지 않지만, Commit 경계가 어긋나면 의도치 않은 중복을 만들 수 있습니다.
비슷한 학습 자료
토스ㅣSLASH 23 - Kafka 이중화로 다양한 장애 상황 완벽 대처하기
SLASH · YouTube
토스증권의 수 천개 실시간 데이터 파이프라인 운영방법 #2: MSA 환경 Observability 높이기
· 토스 기술 블로그
토스증권 Apache Kafka 데이터센터 이중화 구성 #2: 데이터 미러링
송지수 · 토스 기술 블로그
입수는 Datalake로! (feat. Iceberg)
조승완 · 토스 기술 블로그
대규모 CDC Pipeline 운영을 위한 Debezium 개선 여정
김용우 · 토스 기술 블로그
ksqlDB를 활용한 증권사의 실시간 데이터 처리하기
강병수 · 토스 기술 블로그