토스증권 Iceberg 적용기 #1: CDC 환경은 왜 제대로 동작하지 않을까?
김용우 토스 · 토스 기술 블로그
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 경계가 어긋나면 의도치 않은 중복을 만들 수 있습니다.
소개
CDC를 Iceberg에 어떻게 안전하게 적재할 수 있는지에 초점을 맞춰, 우리가 마주했던 문제와 원칙들을 공유합니다.
비슷한 학습 자료
컨퍼런스 SLASH
토스ㅣSLASH 23 - Kafka 이중화로 다양한 장애 상황 완벽 대처하기
컨퍼런스 SLASH
다양한 장애 상황에도 사용자에게 매끄러운 서비스 경험을 제공하는 방법은 뭘까요? 더 견고하고 편리한 증권 서비스 구축을 위한 토스증권의 ‘Kafka IDC 이중화’ 과정을 소개합니다. 강병수 / 토스증권 Data Engineer 발표 자료 👉🏻 https://bit.ly/3CkW4mc 토스 개발자 컨퍼런스 SLASH에 대한 자세한 정보는 👉🏻 https://bit.ly/43kW3tO 컨퍼런스 및 세션에 대한 문의는 👉🏻 slash@toss.im 토스에 합류하고 싶다면 👉🏻 https://toss.im/career/jobs #kafka #idc #dataengineer #토스증권 #개발자컨퍼런스 #SLASH *본 발표자료의 저작권은 연사에 있으며, 저작권자의 사전 서면 동의 없이 자료의 일부 또는 전부를 이용하거나 배포할 수 없습니다. *또한 해당 자료를 복제하여 SLASH 행사 홈페이지를 제외한 온라인상에 게재하는 행위는 연사가 동의한 저작권 및 배포전...
데브옵스 · 인프라 네트워크