Apache Iceberg na Rust bez ciężkiej Javy
Jeśli pracujesz z big data, prawdopodobnie spotkałeś się z Apache Iceberg. To w zasadzie standard budowania architektury Lakehouse na bazie plików Parquet lub ORC. Przez długi czas Java pozostawała głównym domem Iceberga. Prawie wszystkie oficjalne biblioteki i integracje ze Spark czy Trino były napisane dla JVM.
Jednak stack narzędzi do przetwarzania danych przesuwa się teraz w kierunku Rust. Projekty takie jak Apache DataFusion, Polars i inne potrzebują dostępu do tabel Iceberg bez uruchamiania ciężkiego środowiska Java czy bawienia się z JNI. W ten sposób powstało oficjalne repozytorium apache/iceberg-rust w ramach Apache Foundation.
Dlaczego przenieść do Rust
Natywna implementacja zapewnia wydajność i niskie zużycie pamięci. Gdy piszesz mikroserwis do przetwarzania strumieniowego, narzędzie lub niestandardowy Foreign Data Wrapper dla PostgreSQL, ciągnięcie za sobą JVM jest bolesne. JVM wymaga setek megabajtów pamięci przy starcie i okresowo zamraża się z powodu garbage collection.
Biblioteka Rust może bezpośrednio odczytywać metadane i dane Iceberg z lekkich plików binarnych. Projekt rozwija się w ramach samej Apache Foundation, więc to nie jest prywatny fork, ale oficjalny komponent infrastruktury.
Struktura repozytorium
Twórcy nie spakowali wszystkiego w masywny monolit. Projekt jest podzielony na zestaw niezależnych modułów. Bierzesz tylko te zależności, które są faktycznie potrzebne w Twoim serwisie.
Sercem biblioteki jest moduł iceberg. Obsługuje parsowanie metadanych, operacje na manifestach i operacje na schemacie tabel zgodnie ze specyfikacjami Iceberg v1 i v2.
Utworzono osobne crate'y do pracy z katalogami metadanych:
iceberg-catalog-restdla operacji REST APIiceberg-catalog-gluedla integracji z AWS Glue Data Catalogiceberg-catalog-hmsdo łączenia się z Hive Metastoreiceberg-catalog-sqldo przechowywania metadanych w PostgreSQL lub SQLiteiceberg-catalog-s3tablesdo pracy z Amazon S3 Tables
Moduł iceberg-storage-opendal obsługuje fizyczne przechowywanie jak S3, GCS czy dysk lokalny. Korzysta z biblioteki Apache OpenDAL, która natychmiast otwiera dostęp do wszystkich popularnych object stores.
Jeśli potrzebujesz silnika wykonywania zapytań, przydaje się moduł iceberg-datafusion. Ten moduł wiąże Iceberg z silnikiem SQL Apache DataFusion, umożliwiając wykonywanie zapytań SQL wobec tabel bezpośrednio z Rust.
Gdzie to już działa
Prace deweloperskie są aktywne, ale poważne produkty już używają biblioteki w produkcji:
- Databend używa jej w swojej chmurowej hurtowni danych.
- RisingWave wykorzystuje bibliotekę do pracy z Iceberg z ich bazą danych czasu rzeczywistego.
- Supabase używa komponentów Rust Iceberg w rozszerzeniach dla Postgres i w usługach streaming ETL.
- Moonlink używa biblioteki do zadania replikacji danych CDC z Postgres do formatu Iceberg w ułamkach sekundy.
- Apache DataFusion Comet używa jej do przyspieszania wydajności Spark.
Wsparcie i wersjonowanie
Zespół projektu stosuje politykę MSRV (minimalna wspierana wersja Rust). Kod jest budowany i testowany względem stabilnych wydań Rust. Minimalna wspierana wersja kompilatora jest ustalona z buforem około trzech miesięcy względem niedawnych wydań języka.
Prace deweloperskie są w pełni otwarte. Wszystkie dyskusje odbywają się na liście mailingowej [email protected] i w kanale #rust oficjalnej społeczności Apache Iceberg na Slacku.
Czy warto wypróbować
Jeśli budujesz serwisy wokół hurtowni danych, piszesz konektory w Rust lub rozwijasz własne narzędzia do przetwarzania danych, iceberg-rust wygląda na najbardziej logiczny wybór.
Biblioteka jest nadal dopracowywana pod kątem pokrycia całej specyfikacji Iceberg, ale podstawowe odczytywanie, zapisywanie i wsparcie dla kluczowych katalogów działają stabilnie. Dla projektów opartych na DataFusion to już gotowy do użycia blok konstrukcyjny.
Powiązane projekty