Apache Iceberg su Rust Senza Java Pesante
Se lavori con i big data, probabilmente hai incontrato Apache Iceberg. In sostanza, è lo standard per costruire architetture Lakehouse su file Parquet o ORC. Per molto tempo, Java è rimasto il principale ambiente di Iceberg. Quasi tutte le librerie ufficiali e le integrazioni con Spark o Trino sono state scritte per la JVM.
Tuttavia, lo stack di strumenti per l'elaborazione dei dati si sta ora spostando verso Rust. Progetti come Apache DataFusion, Polars e altri hanno bisogno di accedere alle tabelle Iceberg senza avviare un runtime Java pesante o gestire binding JNI. È così che un repository ufficiale apache/iceberg-rust è nato all'interno della Apache Foundation.
Perché portare su Rust
Un'implementazione nativa offre prestazioni elevate e un overhead di memoria ridotto. Quando scrivi un microservizio per l'elaborazione di stream, un'utility o un Foreign Data Wrapper personalizzato per PostgreSQL, trascinarsi dietro la JVM è doloroso. La JVM richiede centinaia di megabyte di memoria all'avvio e periodicamente si blocca a causa della garbage collection.
La libreria Rust può leggere i metadati e i dati Iceberg direttamente da file binari leggeri. Il progetto si sviluppa all'interno della Apache Foundation stessa, quindi non è un fork privato ma un componente infrastrutturale ufficiale.
Struttura del Repository
Gli sviluppatori non hanno raggruppato tutto in un enorme monolite. Il progetto è suddiviso in un insieme di moduli indipendenti. Puoi includere solo le dipendenze effettivamente necessarie nel tuo servizio.
Il nucleo della libreria risiede nel modulo iceberg. Gestisce il parsing dei metadati, le manipolazioni dei manifest e le operazioni dello schema delle tabelle secondo le specifiche Iceberg v1 e v2.
Sono state create crate separate per lavorare con i cataloghi dei metadati:
iceberg-catalog-restper le operazioni REST APIiceberg-catalog-glueper l'integrazione con AWS Glue Data Catalogiceberg-catalog-hmsper la connessione a Hive Metastoreiceberg-catalog-sqlper la memorizzazione dei metadati in PostgreSQL o SQLiteiceberg-catalog-s3tablesper lavorare con Amazon S3 Tables
Il modulo iceberg-storage-opendal gestisce lo storage fisico come S3, GCS o disco locale. Utilizza la libreria Apache OpenDAL, che apre immediatamente l'accesso a tutti i principali object store.
Se hai bisogno di un motore di esecuzione query, il modulo iceberg-datafusion è utile. Questo modulo collega Iceberg al motore SQL Apache DataFusion, permettendoti di eseguire query SQL sulle tabelle direttamente da Rust.
Dove È Già Utilizzato
Lo sviluppo è attivo, ma prodotti seri stanno già usando la libreria in produzione:
- Databend lo usa nel loro data warehouse cloud.
- RisingWave utilizza la libreria per lavorare con Iceberg dal loro database real-time.
- Supabase usa i componenti Rust Iceberg nelle estensioni per Postgres e nei servizi ETL di streaming.
- Moonlink usa la libreria per risolvere il compito di replicare dati CDC da Postgres a formato Iceberg in frazioni di secondo.
- Apache DataFusion Comet lo usa per accelerare le prestazioni di Spark.
Supporto e Versioning
Il team di progetto segue una politica MSRV (minimum supported Rust version). Il codice viene compilato e testato contro le release stabili di Rust. La versione minima supportata del compilatore è fissata con un buffer di circa tre mesi rispetto alle release recenti del linguaggio.
Lo sviluppo è completamente aperto. Tutte le discussioni avvengono sulla mailing list [email protected] e nel canale #rust della community ufficiale Apache Iceberg su Slack.
Vale la Pena Provarlo
Se stai costruendo servizi attorno a data warehouse, scrivendo connettori in Rust, o sviluppando i tuoi strumenti di elaborazione dati, iceberg-rust sembra la scelta più logica.
La libreria sta ancora venendo raffinata in termini di copertura dell'intera specifica Iceberg, ma la lettura e scrittura di base e il supporto per i cataloghi principali funzionano stabilmente. Per i progetti basati su DataFusion, è già un blocco costruttivo pronto all'uso.
Progetti correlati