Lakeflow 선언형 파이프라인과 PySpark 사용자 정의 데이터 소스를 이용한 확장 가능한 시스템 구축
작성자: Frank Munz
매 초마다 수만 대의 항공기가 전 세계적으로 IoT 이벤트를 생성합니다 - 그랜드 캐년 위를 날아가는 4명의 관광객을 태운 작은 세스나에서부터 570명의 승객을 태우고 프랑크푸르트를 출발하여 뉴욕으로 가는 대서양 루트에서 위치, 고도, 비행 경로를 방송하는 에어버스 A380까지.
날씨와 교통 상황이 변화함에 따라 복잡한 비행 경로를 지속적으로 업 데이트해야 하는 항공 교통 관제사처럼, 데이터 엔지니어들은 고처리량, 저지연, 임무 중요도가 높은 항공 데이터 스트림을 처리할 수 있는 플랫폼이 필요합니다. 이러한 임무 중요 시스템에서는 처리를 일시 중지하는 것이 선택사항이 아닙니다.
이런 데이터 파이프라인을 구축하려면 수백 줄의 코드를 다루고, 컴퓨팅 클러스터를 관리하며, 복잡한 권한을 설정하여 ETL을 작동시켜야 했습니다. 그런 날들은 이제 끝났습니다. Lakeflow 선언형 파이프라인을 사용하면, 서버리스 컴퓨팅에서 실행되는 일반 SQL(또는 Python을 선호한다면)을 사용하여 몇 분 안에 생산 준비가 된 스트리밍 파이프라인을 구축할 수 있습니다. 이는 통합된 거버넌스와 세밀한 접근 제어를 제공합니다.
이 글은 교통, 물류, 화물 사용 사례의 아키텍처를 안내합니다. 현재 북미 상공을 비행 중인 모든 항공기로부터 실시간 항공 전자 데이터를 수집하는 파이프라인을 보여줍니다. 이는 몇 줄의 선언형 코드로 실시간 비행 상태 업데이트를 처리합니다.
대부분의 스트리밍 튜토리얼은 실제 세계 예제를 약속하지만, 생산 규모의 볼륨, 속도, 다양성을 간과하는 합성 데이터 세트를 제공합니다. 항공 산업은 세계에서 가장 요구사항이 높은 실시간 데이터 스트림 중 일부를 처리합니다--항공기 위치는 초당 여러 번 업데이트되며, 안전 중심의 애플리케이션에 대한 낮은 지연 요구사항이 있습니다.
OpenSky Network는 옥스퍼드 대학과 다른 연구 소의 연구자들이 진행하는 크라우드 소싱 프로젝트로, 비상업적 용도로 실시간 항공 전자 데이터에 무료로 접근할 수 있게 해줍니다. 이를 통해 우리는 진정으로 매력적인 데이터로 엔터프라이즈 등급의 스트리밍 아키텍처를 보여줄 수 있습니다.
휴대폰에서 비행기를 추적하는 것은 캐주얼한 재미이지만, 같은 데이터 스트림은 수십억 달러 규모의 물류 작업을 지원합니다: 항구 당국은 지상 작업을 조정하고, 배송 서비스는 비행 일정을 알림에 통합하며, 화물 운송업자는 전세계 공급 체인을 통한 화물 움직임을 추적합니다.
전통적인 아키텍처는 외부 시스템을 데이터 플랫폼에 연결하기 위해 상당한 코딩과 인프라 오버헤드를 필요로 합니다. 제3자 데이터 스트림을 수집하려면 일반적으로 제3자 SaaS 솔루션에 대한 비용을 지불하거나 인증 관리, 흐름 제어 및 복잡한 오류 처리를 포함한 사용자 정의 커넥터를 개발해야 합니다.
데이터 인텔리전스 플랫폼에서는, Lakeflow Connect 가 Salesforce, Workday, ServiceNow와 같은 기업 비즈니스 시스템의 복잡성을 해결하며, 인증, 변경 데이터 캡처, 오류 복구를 자동으로 처리하는 관리형 커넥터의 수를 늘려줍니다.
Lakeflow의 OSS 기반인 Apache Spark™는 Parquet, Iceberg, Delta.io와 같은 클라우드 저장 형식부터 Apache Kafka, Pulsar, Amazon Kinesis와 같은 메시지 버스까지 수십 가지 기술 시스템에서 읽을 수 있는 내장 데이터 소스의 광범위한 생태계를 제공합니다. 예를 들어, spark.readStream.format("kafka")를 사용하여 쉽게 Kafka 토픽에 연결할 수 있습니다. 이 익숙한 구문은 모든 지원 데이터 소스에서 일관되게 작동합니다.
그러나 Lakeflow Connect가 다루는 기업 시스템과 Spark의 기술 기반 커넥터 사이에서 임의의 API를 통해 제3자 시스템에 접근할 때 차이가 있습니다. 일부 서비스는 REST API를 제공하지만 어느 카테고리에도 속하지 않으며, 그럼에도 불구하고 조직들은 이러한 데이터를 그들의 레이크하우스에 필요로 합니다.
PySpark 사용자 정의 데이터 소스 는 API 통합을 다른 데이터 소스만큼 간단하게 만드는 깔끔한 추상화 계층으로 이 공백을 채워줍니다.
이 블로그에서는 OpenSky Network를 위한 PySpark 사용자 정의 데이터 소스를 구현하고 간단한 pip 설치로 사용할 수 있게 만들었습니다. 데이터 소스는 API 호출, 인증, 오류 처리를 캡슐화합니다. 위의 예제에서 "kafka"를 "opensky"로 간단히 바꾸면 나머지는 동일하게 작동합니다:
이 추상화를 사용하면, 팀은 통합 오버헤드보다는 비즈니스 로직에 집중할 수 있으며, 모든 데이터 소스에서 동일한 개발자 경험을 유지할 수 있습니다.
사용자 정의 데이터 소스 패턴은 금융 시장 데이터, IoT 센서 네트워크, 소셜 미디어 스트림, 예측 유지 보수 시스템 등의 외부 API에 대해 원활하게 작동하는 일반적인 아키텍처 솔루션입니다. 개발자들은 HTTP 연결 풀링, 속도 제한, 인증 토큰에 대해 걱정하지 않고 익숙한 Spark DataFrame API를 활용할 수 있습니다.
이 접근 방식은 통합 노력이 재사용 가능한 커넥터를 구축하는 것을 정당화하고, 엔터프라이즈 등급의 관리 솔루션이 존재하지 않는 제3자 시스템에 특히 유용합니다.
이제 사용자 정의 데이터 소스가 API 연결성을 어떻게 처리하는지 확인했으니, 스트리밍 테이블 이 이 데이터를 어떻게 안정적으로 처리하는지 살펴봅시다. IoT 데이터 스트림은 중복 감지, 늦게 도착하는 이벤트, 그리고 처리 보장 등에 대해 특정한 도전을 제시합니다. 전통적인 스트리밍 프레임워크는 정확한 한 번의 의미를 달성하기 위해 여러 컴포넌트 간에 신중한 조정이 필요합니다.
Lakeflow 선언형 파이프라인의 스트리밍 테이블은 이러한 복잡성을 선언형 의미 체계를 통해 해결합니다. Lakeflow는 낮은 지연 처리와 고처리량 애플리케이션 모두에서 뛰어납니다.
이는 사용자 정의 데이터 소스로 구동되는 스트리밍 테이블을 보여주는 첫 번째 기사 중 하나일 수 있지만, 마지막은 아닙니다. 선언형 파이프라인과 PySpark 데이터 소스가 이제 Apache Spark™에서 오픈 소스로 널리 사용 가능하므로, 이러한 기능이 개발자들에게 점점 더 접근 가능해지고 있습니다.
위의 코드는 항공 전자 데이터를 데이터 스트림으로 접근합니다. 동일한 코드는 스트리밍과 배치 처리에 대해 동일하게 작동합니다. Lakeflow를 사용하면 파이프라인의 실행 모드를 구성하고 Lakeflow Jobs와 같은 워크플로우를 사용하여 실행을 트리거할 수 있습니다.

이 간단한 구현은 선언형 프로그래밍의 힘을 보여줍니다. 위의 코드는 지속적으로 항공 전자 데이터를 실시간으로 수집하는 스트리밍 테이블을 결과로 가져옵니다 - 이것은 현재 미국 상공을 날고 있는 약 10,000대의 비행기로부터 데이터를 스트리밍하는 완전한 구현입니다(시간에 따라 다름). 플랫폼은 나머지 모든 것 - 인증, 증분 처리, 오류 복구, 스케일링을 처리합니다.
비행기의 호출 신호, 현재 위치, 고도, 속도, 방향, 목적지 등 모든 세부 사항이 스트리밍 테이블로 수집됩니다. 이 예는 코드와 같은 스니펫이 아니라, 대규모로 실제, 실행 가능한 데이터를 제공하는 구현입니다.
전체 애플리케이션은 새로운 Lakeflow 선언형 파이프라인 에디터를 사용하여 처음부터 상호 작용적으로 쉽게 작성할 수 있습니다. 새로운 에디터는 기본적으로 파일을 사용하므로, 데이터소스 패키지 pyspark-data-sources 를 노트북에서 pip install을 실행하는 대신 에디터의 설정/환경에서 직접 추가할 수 있습니다.
