매 초마다 수만 대의 항공기가 전 세계적으로 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을 실행하는 대신 에디터의 설정/환경에서 직접 추가할 수 있습니다.
뒷단에서, Lakeflow는 스트리밍 인프라를 관리합니다: 자동 체크포인팅은 실패 복구를 보장하고, 증분 처리는 중복 계산을 제거하며, 정확한 한 번의 보장은 데이터 중복을 방지합니다. 데이터 엔지니어는 비즈니스 로직을 작성하고, 플랫폼은 운영적 우수성을 보장합니다.
위의 예제는 독립적으로 작동하며 상자에서 완전히 기능합니다. 그러나, 생산 배포는 일반적으로 추가 구성을 필요로 합니다. 실제 시나리오에서 사용자는 OpenSky 데이터 수집을 위한 지리적 지역을 지정하거나, API 비율 제한을 늘리기 위해 인증을 활성화하고, 나쁜 데이터가 시스템에 들어가는 것을 방지하기 위해 데이터 품질 제약을 적용해야 할 수 있습니다.
주요 대륙과 지리적 지역에 대해 사전 정의된 경계 상자를 지정하여 특정 지역 위의 비행을 추적할 수 있습니다. 데이터 소스에는 아프리카, 유럽, 북아메리카 등을 포함한 지역 필터가 포함되어 있으며, 전세계적인 범위를 위한 글로벌 옵션도 있습니다. 이러한 내장된 지역들은 데이터의 반환 볼륨을 제어하면서 분석을 특정 사용 사례에 관련된 지리적 영역에 집중하게 도와줍니다.
OpenSky 네트워크와의 인증은 생산 배포에 중요한 이점을 제공합니다. OpenSky API는 실시간 비행 추적 애플리케이션에 필수적인 하루에 100회(익명)에서 4,000회(인증됨)로 요율 제한을 늘립니다.
인증을 위해 https://opensky-network.org 에서 API 자격 증명을 등록하고 데이터 소스를 구성할 때 client_id와 client_secret을 옵션으로 제공합니다. 이러한 자격 증명은 코드에 하드코딩되는 대신 Databricks 비밀로 저장되어야 합니다.
OpenSky Network에 데이터를 공급하면 이 제한을 하루에 8,000회 호출로 늘릴 수 있다는 점을 유의하십시오. 이 재미있는 프로젝트는 귀하의 발코니에 ADS-B 안테나를 설치하여 이 군중 소스화된 이니셔티브에 기여하는 것을 포함합니다.
데이터 품질은 신뢰할 수 있는 분석에 있어 중요합니다. 선언적 파이프라인 기대치는 스트리밍 데이터를 자동으로 검증하는 규칙을 정의하며, 오직 깨끗한 레코드만 테이블에 도달하도록 보장합니다.
이러한 기대치는 누락된 값, 유효하지 않은 형식, 비즈니스 규칙 위반을 잡아낼 수 있습니다. 나쁜 레코드를 삭제하거나, 검토를 위해 격리하거나, 검증이 실패할 때 파이프라인을 중단할 수 있습니다. 다음 섹션의 코드는 지역 선택, 인증, 데이터 품질 검증을 생산 사용에 대해 구성하는 방법을 보여줍니다.
아래 구현은 지역 파라미터와 인증이 있는 스트리밍 테이블의 예를 보여주며, 데이터 소스가 지리적 필터링과 API 자격 증명을 어떻게 처리하는지 보여줍니다. 데이터 품질 검증은 항공기 ID(국제 민간 항공 기구 - ICAO에 의해 관리)와 비행기의 좌표가 설정되어 있는지 확인합니 다.
스트리밍 데이터에 대한 실시간 분석은 일반적으로 스트림 처리 엔진, 캐싱 계층, 분석 데이터베이스를 결합하는 복잡한 아키텍처를 필요로 합니다. 각 구성 요소는 운영 오버헤드, 일관성 문제, 추가 실패 모드를 도입합니다.
Lakeflow 선언적 파이프라인의 물리화 된 뷰 는 서버리스 컴퓨트로 기본 런타임을 추상화함으로써 이러한 아키텍처 오버헤드를 줄입니다. 간단한 SQL 문은 새로운 데이터가 도착함에 따라 자동으로 업데이트되는 사전 계산된 결과를 포함하는 물리화 뷰를 생성합니다. 이러한 결과는 대시보드, Databricks 앱, 또는 Lakeflow Jobs로 구현된 워크플로우에서 추가 분석 작업에 최적화되어 있습니다.
이 물리화된 뷰는 스트리밍 테이블에서 항공기 상태 업데이트를 집계하여 비행 패턴, 속도, 고도에 대한 전세계 통계를 생성합니다. 새로운 IoT 이벤트가 도착하면, 뷰는 서버리스 Lakeflow 플랫폼에서 증분적으로 업데이트됩니다. 매일 거의 10억 개의 이벤트를 다시 계산하는 대신 몇 천 개의 변경만 처리함으로써 처리 시간과 비용이 크게 줄어듭니다.
Lakeflow 선언형 파이프라인에서의 선언적 접근법은 변경 데이터 캡처, 증분 계산, 결과 캐싱에 대한 전통적인 복잡성을 제거합니다. 이를 통해 데이터 엔지니어는 대시보드, Databricks 애플리케이션, 또는 다른 하위 사용 사례에 대한 뷰를 생성할 때 분석 로직에만 집중할 수 있습니다.
더 많은 데이터는 종종 새로운 조직적인 도전을 만들어냅니다. 실시간 데이터가 사용 가능하더라도, 일반적으로 기술 데이터 엔지니어링 팀만이 파이프라인을 수정하므로, 분석 비즈니스 팀은 ad hoc 분석을 위해 엔지니어링 리소스에 의존합니다.
AI/BI Genie 는 모든 사람을 위한 스트리밍 데이터에 대한 자연어 쿼리를 가능하게 합니다. 비기술 사용자는 평문 영어로 질문을 할 수 있고, 쿼리는 실시간 데이터 소스에 대한 SQL로 자동 변환됩니다. 생성된 SQL을 검증할 수 있는 투명성은 AI 환영에 대한 중요한 보호 장치를 제공하면서도 쿼리 성능과 거버넌스 표준을 유지합니다.
뒷단에서, Genie는 Unity 카탈로그 접근 규칙을 따르면서 질문을 이해하기 위해 에이전트 추론을 사용합니다. 확실하지 않을 때는 명확한 설명을 요구하고, 예제 쿼리와 지시를 통해 비즈니스 용어를 배웁니다.
예를 들어, "현재 추적되고 있는 고유한 비행기는 몇 대인가요?"는 내부적으로 SELECT COUNT(DISTINCT icao24) FROM ingest_flights로 번역됩니다. 마법 같은 것은 자연어 요청에서 열 이름을 알 필요가 없다는 것입니다.
또 다른 명령어인 "모든 항공기에 대한 고도 대 속도 그래프 그리기," 는 속도와 고도의 상관 관계를 보여주는 시각화를 생성합니다. 그리고 "
