TL;DR

  • Ursa는 오브젝트 스토리지용 스트림 저장 API·명세인 Lakestream을 구현하고 스트림을 레이크하우스 테이블로 구체화하는 스토리지 엔진임.
  • Ursa 1.0org.openlakestream 그룹으로 Maven Central에 공개되며, Java 프로그램에 임베드할 수 있음.
  • 오브젝트·블록·파일 스토리지를 스트림 저장소로 전환해 디스크리스·리더리스 구조를 지원함.
  • Delta Lake, Apache Iceberg, ClickHouse 등과 연계해 스트림 데이터를 외부 분석 테이블로 전달함.
  • AWS S3, Google Cloud Storage, Azure Blob Storage를 지원하며, Kafka 배포판인 Ursa for Apache Kafka (UFK)는 디스크리스 토픽을 Ursa에 저장함.

Ursa

  • Ursa는 레이크하우스 패러다임에서 스트림을 저장 기본 요소로 다루는 스토리지 엔진임.
  • 오브젝트 스토리지의 스트림 저장을 위한 개방형 API·명세인 Lakestream과, 스트림을 레이크하우스 테이블로 전환하는 방식을 정의하는 스트림 구체화 프레임워크를 구현함.
  • 모든 오브젝트·블록·파일 저장소를 스트림 저장소로 전환하고, 스트림을 레이크하우스 테이블과 기타 질의 가능한 상태로 구체화함.
  • Ursa 1.0은 org.openlakestream 그룹으로 Maven Central에 공개되며, 빠른 시작 예제는 Java 프로그램에 Ursa를 임베드함.
  • 메시징 브로커에 임베드하도록 설계됐으며, Apache Kafka 배포판인 Ursa for Apache Kafka (UFK)는 Lakestream API·명세를 기반으로 하고 디스크리스 토픽을 Ursa에 저장함.

원칙

스트림 저장 및 테이블 구체화

  • 스트리밍 읽기와 재생을 위해 스트림 레코드를 쓰기 선행 로그(WAL)와 오프셋 인덱스가 포함된 압축 객체(Compacted Objects)에 보관함.
  • 선택적 테이블 구체화 기능은 레코드를 외부 분석 테이블로 전달하며, 해당 테이블의 파일과 수명 주기는 내부 스트림 저장소와 독립적임.

디스크리스·리더리스 아키텍처

  • 모든 오브젝트·블록·파일 저장소를 공유 로그 또는 스트림 저장소로 전환함으로써, 저장소 엔진을 브로커 프로토콜에 결합하지 않는 디스크리스 이벤트 스트리밍 통합을 지원함.
  • 파티션의 단일 장애 지점 또는 병목이 없음.
  • 가용 영역 간 네트워크 트래픽이 감소함.
  • 리더 선출이나 리밸런싱이 필요하지 않아 운영 복잡성이 낮아짐.
  • 이벤트 브로커에 리밸런싱이 필요 없는 아키텍처임.

통합 테이블 전달

  • 백그라운드 구체화는 내부 압축과 동일한 WAL 읽기 패스를 사용해 스트림 레코드를 외부 테이블로 전달함.
  • 애플리케이션은 스트림 API로 보관된 레코드를 소비하고 대상 테이블의 API로 전달된 사본을 질의할 수 있음.

주요 기능

  • 스트림 우선 저장 기본 요소: 데이터 스트림과 레이크하우스 테이블을 위한 통합 추상화
  • 멀티클라우드 지원: AWS S3, Google Cloud Storage, Azure Blob Storage
  • 레이크하우스 통합: 다중 카탈로그 지원을 포함한 Delta Lake 및 Apache Iceberg
  • 고성능: 읽기·쓰기 캐싱, 배칭, 프리페칭 최적화
  • 관측 가능성: 저장소 및 압축 경로에 대한 메트릭(메트릭스 참조)

개념 및 아키텍처

  • 스토리지 개념
  • 레이크하우스 테이블
  • 기능 매트릭스

모듈

  • lakestream-api: 프로토콜 중립적인 스트림·로그·카탈로그 API
  • ursa-storage-core: 여러 저장소 백엔드를 지원하는 핵심 스토리지 엔진
  • ursa-storage-common: 공유 유틸리티, 예외, 공통 인터페이스
  • ursa-storage-lakestream: Lakestream API 구현 및 카탈로그
  • ursa-storage-materialization: 스트림-테이블 구체화 SPI 및 Kafka 코덱
  • ursa-storage-lakehouse: 카탈로그 지원을 포함하는 레이크하우스 통합
  • ursa-storage-lakehouse-kafka-reader: 격리된 Kafka 압축 데이터 리더
  • ursa-storage-kafka-runtime: Lakestream API 뒤에서 Ursa와 Kafka 압축 읽기를 연결하는 리프 런타임
  • ursa-storage-clickhouse: ClickHouse 구체화 싱크
  • ursa-storage-compact: 분산 압축 서비스
  • ursa-storage-containers: 테스트 인프라 및 Testcontainers
  • ursa-storage-test: 통합 및 종단 간 테스트
  • ursa-storage-tools: 성능 테스트 및 벤치마킹 도구

빌드 및 실행

  • 전체 빌드 및 로컬 실행 안내는 로컬 빌드 및 실행 문서를 참조함.

개발

  • 프로젝트 기여 방법은 기여 가이드를 참조함.

지원

  • 이슈: GitHub Issues에서 버그 및 기능 요청을 보고함.
  • 문서: 자세한 가이드는 docs/를 참조함.
  • 질문: GitHub Discussions에서 질문함.
  • 명세: Lakestream API 및 명세는 openlakestream.org에 문서화됨.

라이선스

  • Ursa의 라이선스는 Apache License, Version 2.0임.
  • 바이너리 배포판에는 Apache 2.0 및 기타 허용적 라이선스의 서드파티 JAR만 포함됨.
  • JSON Schema 및 Protobuf 레코드는 Confluent Community License 제공자 아티팩트 없이 디코딩됨. 자세한 내용은 서드파티 라이선스 안내와 빌드 가드레일을 참조함.