Incremental Processing using Netflix Maestro and Apache Iceberg
by Jun He, Yingyi Zhang, and Pawan Dixit
netflixtechblog.com
개요
- IPS( incremental processing solution )는 Maestro를 기반으로 두 가지 Building Block(새로운 Trigger 메커니즘과 Step Job) 을 추가하여 모든 워크플로에 대한 증분 처리를 지원하는 확장 기능으로 구축되었습니다. 최소한의 On-boarding 비용으로 전체 Maestro 생태계(Ecosystem)에 원활하게 통합됩니다.
※ Maestro란?
Netflix가 탄생시킨 WAAS(Workflow-as-a-Service) 형태의 차세대 Data Workflow Orchestration 플랫폼 입니다. 다양한 사용 사례에 대해 데이터 과학자, 데이터 엔지니어, 기계 학습 엔지니어, 소프트웨어 엔지니어, 콘텐츠 제작자 및 비즈니스 분석가를 포함한 수천 명의 사용자에게 서비스를 제공합니다.
Maestro는 확장성이 뛰어나 기존 및 새로운 사용 사례를 지원하고 최종 사용자에게 향상된 유용성을 제공합니다.
- IPS에서는 Apache Iceberg가 제공하는 풍부한 기능을 활용하여 테이블 변경 사항을 캡처하는 경량 접근 방식을 개발합니다.
※ Iceberg란?
대량의 분석적인 테이블에 대한 고성능 포맷입니다. Iceberg는 Spark, Trino, Flink, Presto, Hive, Impala와 같은 빅데이터 엔진에다가 SQL 테이블의 신뢰성과 간결성을 제공합니다.
Maestro와 Iceberg를 통해 아래와 같은 패턴을 만들 수 있었습니다.
1. 캡처된 증분 변경 데이터를 증분 처리하고 대상 테이블에 직접 추가합니다.
이는 변경 데이터가 데이터 처리에 필요한 모든 정보를 전달하는 간단한 증분 처리 사용 사례입니다. 업스트림 변경 사항(일반적으로 단일 소스 테이블의)은 다운스트림(일반적으로 다른 대상 테이블)으로 전파되고 워크플로 파이프라인은 변경 데이터(다른 차원 테이블과 조인할 수 있음)만 처리한 다음 해당 테이블에 병합(일반적으로 추가)하면 됩니다. 대상 테이블. 이 패턴은 늦게 도착하는 데이터를 처리하기 위해 전환 확인 기간 패턴을 대체합니다. 전환 확인 기간 패턴을 사용하여 지난 X일의 데이터를 완전히 덮어쓰는 대신 사용자 워크플로는 ICDC 테이블을 처리하여 변경 데이터(늦게 도착하는 데이터 포함)를 대상 테이블에 병합하기만 하면 됩니다.
캡처된 증분 변경 데이터를 행(row) 수준 필터를 사용하여 불필요한 변환 제거
![](https://blog.kakaocdn.net/dn/XjChY/btsA8LFEbEi/jaWiNUVvhSC1gHYIEDK9W1/img.png)
ETL 작업은 일반적으로 특정 그룹별 키를 기반으로 데이터를 집계해야 합니다. 변경 데이터는 소스 테이블의 새 랜딩 데이터로 인해 재집계가 필요한 모든 그룹화 키를 공개합니다. 그런 다음 ETL 작업은 ICDC를 필터로 사용하여 훨씬 더 작은 데이터 세트의 계산을 가능하게 하는 처리 속도를 높여 해당 그룹별 키의 ICDC 테이블과 원본 소스 테이블을 조인할 수 있습니다. 비즈니스 변환 논리에는 변경 사항이 없으며 ETL 워크플로는 다시 설계되지 않습니다. ETL 파이프라인은 배치 워크플로의 모든 이점을 유지합니다.
비즈니스 로직에서 캡처된 범위 매개변수 사용
![](https://blog.kakaocdn.net/dn/A010W/btsA6RGxZ7w/YBXiybk8102i1SrRx88FNK/img.png)
이 패턴은 일반적으로 여러 테이블을 조인하고 복잡한 처리를 수행하는 등 복잡한 사용 사례에 사용됩니다. 이 경우 변경 데이터는 ETL 워크플로에 필요한 입력의 전체 그림을 제공하지 않습니다. 대신 변경 데이터는 지정된 입력 테이블 또는 일반적으로 여러 입력 테이블의 특정 필드 집합(파티션 키일 수 있음)에 대해 변경된 데이터 집합의 범위를 나타냅니다. 그런 다음 모든 입력 테이블의 변경 범위를 통합하면 워크플로에 필요한 전체 변경 데이터 세트가 제공됩니다. 또한 변환은 상태 비저장이 아니며 이전 범위의 결과에 따라 달라지기 때문에 일반적으로 전체 데이터 범위를 덮어써야 합니다. 또 다른 예는 쿼리의 대상 테이블 또는 창 함수의 집계된 레코드가 파티션의 전체 데이터 세트를 기반으로 업데이트되어야 한다는 것입니다(예: 전체 파티션에 대한 매체 계산). 기본적으로 변경 데이터에서 파생된 범위는 재처리할 데이터 세트를 나타냅니다.
'PaaS > Data' 카테고리의 다른 글
(데이터시각화) Tableau Map (지도) 기반 시각화 웹사이트 노출 방법 (0) | 2023.11.27 |
---|---|
(데이터시각화) Tableau Map (지도) 기반 시각화 샘플 (1) | 2023.11.27 |
(데이터시각화) Tableau 서버 설치하기 (0) | 2023.11.26 |
Cache Store(Redis) 읽기/쓰기 전략 (0) | 2023.11.05 |
ElasticSearch 의 Tokenizer와 Text Analyze 에 대해서 (0) | 2023.10.23 |