Telemetry 아키텍처
Telemetry는 수신한 JSON을 검증하고 허용된 이벤트를 버퍼에 넣은 뒤 S3에 Parquet 파일로 저장합니다. SQL 쿼리는 버퍼와 저장된 데이터를 함께 읽으므로 다음 업로드 전에도 최근 이벤트를 조회할 수 있습니다.
쿼리는 실시간 버퍼와 저장된 Parquet 파일을 함께 읽습니다.
데이터 수집과 버퍼링
Rust 서비스가 수신한 각 JSON 이벤트를 대상 테이블 스키마와 비교합니다. 호환되는 이벤트는 버퍼에 추가합니다. 버퍼는 15분이 지나거나 10,000행에 도달하면 S3에 업로드됩니다.
실시간 쿼리
쿼리는 버퍼의 이벤트와 S3 또는 디스크 캐시에 저장된 데이터를 함께 읽습니다. 이벤트가 결과에 표시되기 위해 버퍼 저장을 기다릴 필요는 없습니다.
스키마 변경
Telemetry는 이벤트가 들어올 때 새 필드를 테이블 스키마에 추가합니다. 기존 행에는 해당 필드의 값이 없습니다. 필드 추가와 필드 유형 변경은 서로 다른 작업입니다. 이전 규칙과 예시는 스키마 변경을 참고하세요.
장애 대응과 버퍼 관리
서비스는 정상 종료 시 버퍼를 저장합니다. 처리하거나 저장하지 못한 데이터는 복구할 수 있도록 데드 레터 큐에 보관합니다. 이러한 복구 경로가 모든 장애에서 데이터 손실을 막지는 못합니다. 잃어서는 안 되는 이벤트는 애플리케이션에서도 재시도 동작을 정의하고 전달 결과를 확인해야 합니다.
파일 병합
작은 Parquet 파일을 큰 파일로 합칩니다. 쿼리가 열어야 하는 파일 수가 줄고 Parquet가 더 많은 행을 함께 압축할 수 있습니다.
쿼리 파일 선택
Telemetry는 SQL을 추상 구문 트리로 분석하여 테이블, 시간 범위, 필터를 식별합니다. 파일 메타데이터로 쿼리에 필요한 파일을 선택하고 S3에서 가져옵니다.
디스크 캐시와 쿼리 라우팅
Telemetry는 파일 내용에 따라 디스크에 캐시하고 각 테넌트의 쿼리를 관련 파일이 있을 가능성이 높은 서버로 보냅니다. 캐시에 파일이 있으면 S3 다운로드를 건너뜁니다. 쿼리 지연 시간은 읽는 데이터, 쿼리 자체, 필요한 파일의 캐시 여부에 따라 달라집니다.
쿼리 실행
Apache DataFusion이 선택한 파일에 SQL을 실행하고 결과를 반환합니다. 지원되는 쿼리 작성법은 DataFusion SQL 참조를 확인하세요.