Pinterest의 차세대 DB 수집 프레임워크에서의 파티션 최종화
이 게시물은 Pinterest의 새로운 데이터베이스 수집 프레임워크에서 다운스트림 소비에 충분히 완료된 시점을 결정하는 솔루션을 소개합니다. Kafka, Flink, Iceberg와 같은 기술을 기반으로 구축된 이 프레임워크는 데이터를 지속적으로 처리하며, 이는 이전에 최종 처리를 위해 단일 실행 배치 작업에 의존했던 배치 작업에 어려움을 야기합니다. 시간 열로 그룹화된 시간 분할 데이터는 소비자가 전체 테이블을 스캔하지 않고 특정 슬라이스를 읽을 수 있도록 합니다. 배치 시스템에서는 프로듀서가 쓰기를 완료하면 파티션이 최종으로 간주되었습니다. 그러나 스트리밍 프레임워크는 파티션에 지속적으로 쓰기 때문에 기존의 최종 처리가 어렵습니다. 이를 해결하기 위해 Pinterest는 Flink-to-Iceberg 싱크 내에서 이벤트 시간 기반 파티션 최종 처리 메커니즘을 개발했습니다. 이 시스템은 레코드에서 이벤트 시간을 추출하고, Flink 체크포인트 간의 최소 및 최대 이벤트 시간과 같은 통계를 수집하며, 이를 Iceberg의 스냅샷 요약에 저장합니다. 그런 다음 알고리즘이 이러한 통계를 사용하여 파티션이 완료된 시점을 나타내는 워터마크를 생성하며, 이는 항상 증가하도록 보장합니다. 이 워터마크는 Iceberg 테이블 속성으로 저장되어 다운스트림 작업이 처리 트리거를 위해 이를 쿼리할 수 있도록 합니다. 이 메커니즘은 업서트 작업에 의해 기본 테이블로 전파되어 신호가 데이터와 함께 이동하도록 보장합니다. 이 구현은 확장 가능한 Iceberg-Flink 싱크 기능을 활용합니다. 누적기는 작성자 하위 작업에서 레코드 통계를 수집하고, 커밋 프로세서는 Iceberg 커밋 전후에 사용자 정의 로직을 실행합니다. 이 설계는 확장이 구성되지 않은 경우 오버헤드가 없도록 하고, 파티션 최종 처리가 스트리밍 데이터 파이프라인에 효율적으로 통합되도록 보장합니다.