Apache Iceberg sur Rust sans la lourdeur de Java
Si vous travaillez avec des données volumineuses, vous avez probablement croisé Apache Iceberg. En substance, c'est devenu la norme pour construire une architecture Lakehouse au-dessus de fichiers Parquet ou ORC. Pendant longtemps, Java est resté le foyer principal d'Iceberg. Presque toutes les bibliothèques officielles et les intégrations avec Spark ou Trino ont été écrites pour la JVM.
Cependant, la pile d'outils de traitement de données évolue désormais vers Rust. Des projets comme Apache DataFusion, Polars et d'autres ont besoin d'accéder aux tables Iceberg sans démarrer un runtime Java lourd ni gérer des liaisons JNI. C'est ainsi qu'un dépôt officiel apache/iceberg-rust a vu le jour au sein de la Fondation Apache.
Pourquoi porter vers Rust
Une implémentation native offre des performances et une faible surcharge mémoire. Lorsque vous écrivez un microservice pour le traitement de flux, un utilitaire ou un Foreign Data Wrapper personnalisé pour PostgreSQL, trimballer la JVM est douloureux. La JVM nécessite des centaines de mégabytes de mémoire au démarrage et se fige périodiquement en raison du garbage collection.
La bibliothèque Rust peut lire les métadonnées et les données Iceberg directement à partir de fichiers binaires légers. Le projet se développe au sein de la Fondation Apache elle-même, il ne s'agit donc pas d'un fork privé mais d'un composant d'infrastructure officiel.
Structure du dépôt
Les développeurs n'ont pas regroupé tout dans un monolithe massif. Le projet est divisé en un ensemble de modules indépendants. Vous ne prenez que les dépendances réellement nécessaires dans votre service.
Le cœur de la bibliothèque réside dans le module iceberg. Il gère l'analyse syntaxique des métadonnées, les manipulations de manifest et les opérations de schéma de table selon les spécifications Iceberg v1 et v2.
Des crates séparés ont été créés pour travailler avec les catalogues de métadonnées :
iceberg-catalog-restpour les opérations d'API RESTiceberg-catalog-gluepour l'intégration avec AWS Glue Data Catalogiceberg-catalog-hmspour la connexion à Hive Metastoreiceberg-catalog-sqlpour stocker les métadonnées dans PostgreSQL ou SQLiteiceberg-catalog-s3tablespour travailler avec Amazon S3 Tables
Le module iceberg-storage-opendal gère le stockage physique comme S3, GCS ou le disque local. Il utilise la bibliothèque Apache OpenDAL, ce qui ouvre immédiatement l'accès à tous les stores d'objets populaires.
Si vous avez besoin d'un moteur d'exécution de requêtes, le module iceberg-datafusion s'avère utile. Ce module lie Iceberg au moteur SQL Apache DataFusion, vous permettant d'exécuter des requêtes SQL sur des tables directement depuis Rust.
Où ça fonctionne déjà
Le développement est actif, mais des produits sérieux utilisent déjà la bibliothèque en production :
- Databend l'utilise dans leur entrepôt de données cloud.
- RisingWave exploite la bibliothèque pour travailler avec Iceberg depuis leur base de données temps réel.
- Supabase utilise les composants Rust Iceberg dans des extensions pour Postgres et dans les services ETL de streaming.
- Moonlink utilise la bibliothèque pour résoudre la tâche de réplication de données CDC de Postgres vers le format Iceberg en fractions de seconde.
- Apache DataFusion Comet l'utilise pour accélérer les performances de Spark.
Support et gestion de versions
L'équipe du projet suit une politique MSRV (minimum supported Rust version). Le code est compilé et testé contre les versions stables de Rust. La version minimale supportée du compilateur est fixée avec un tampon d'environ trois mois par rapport aux dernières versions du langage.
Le développement est entièrement ouvert. Toutes les discussions ont lieu sur la liste de diffusion [email protected] et dans le canal #rust de la communauté Slack Apache Iceberg officielle.
Cela vaut-il le coup de l'essayer
Si vous construisez des services autour d'entrepôts de données, écrivez des connecteurs en Rust ou développez vos propres outils de traitement de données, iceberg-rust ressemble au choix le plus logique.
La bibliothèque est encore en cours de perfectionnement en termes de couverture de l'ensemble de la spécification Iceberg, mais la lecture, l'écriture de base et le support des catalogues clés fonctionnent de manière stable. Pour les projets basés sur DataFusion, c'est déjà un bloc de construction prêt à l'emploi.
Projets similaires