Apache Iceberg em Rust Sem Java Pesado
Se você trabalha com big data, provavelmente já encontrou o Apache Iceberg. Essencialmente, é o padrão para construir arquitetura Lakehouse sobre arquivos Parquet ou ORC. Por um longo tempo, Java foi o principal lar do Iceberg. Quase todas as bibliotecas oficiais e integrações com Spark ou Trino foram escritas para a JVM.
No entanto, o conjunto de ferramentas de processamento de dados está agora mudando para Rust. Projetos como Apache DataFusion, Polars e outros precisam de acesso a tabelas Iceberg sem iniciar um runtime Java pesado ou lidar com bindings JNI. É assim que um repositório oficial apache/iceberg-rust passou a existir dentro da Apache Foundation.
Por Que Portar para Rust
Uma implementação nativa oferece performance e baixo overhead de memória. Quando você está escrevendo um microsserviço para processamento de streams, um utilitário, ou um Foreign Data Wrapper customizado para PostgreSQL, arrastar o JVM é doloroso. O JVM requer centenas de megabytes de memória no início e congela periodicamente devido ao garbage collection.
A biblioteca Rust pode ler metadados e dados Iceberg diretamente de arquivos binários leves. O projeto se desenvolve dentro da própria Apache Foundation, então não é um fork privado, mas sim um componente oficial de infraestrutura.
Estrutura do Repositório
Os desenvolvedores não empacotaram tudo em um monólito massivo. O projeto é dividido em um conjunto de módulos independentes. Você usa apenas as dependências que realmente precisa no seu serviço.
O núcleo da biblioteca está no módulo iceberg. Ele lida com parsing de metadados, manipulações de manifest e operações de schema de tabelas de acordo com as especificações Iceberg v1 e v2.
Crates separados foram criados para trabalhar com catálogos de metadados:
iceberg-catalog-restpara operações de API RESTiceberg-catalog-gluepara integração com AWS Glue Data Catalogiceberg-catalog-hmspara conexão com Hive Metastoreiceberg-catalog-sqlpara armazenar metadados em PostgreSQL ou SQLiteiceberg-catalog-s3tablespara trabalhar com Amazon S3 Tables
O módulo iceberg-storage-opendal lida com armazenamento físico como S3, GCS ou disco local. Ele usa a biblioteca Apache OpenDAL, que abre imediatamente acesso a todos os armazenamentos de objetos populares.
Se você precisa de um motor de execução de queries, o módulo iceberg-datafusion é útil. Este módulo faz o binding do Iceberg com o motor SQL Apache DataFusion, permitindo que você execute queries SQL contra tabelas diretamente do Rust.
Onde Já Está Funcionando
O desenvolvimento está ativo, mas produtos sérios já estão usando a biblioteca em produção:
- Databend usa em seu data warehouse em nuvem.
- RisingWave utiliza a biblioteca para trabalhar com Iceberg a partir de seu banco de dados em tempo real.
- Supabase usa componentes Rust Iceberg em extensões para Postgres e em serviços de ETL de streaming.
- Moonlink usa a biblioteca para resolver a tarefa de replicar dados CDC do Postgres para formato Iceberg em frações de segundo.
- Apache DataFusion Comet usa para acelerar a performance do Spark.
Suporte e Controle de Versão
A equipe do projeto segue uma política de MSRV (minimum supported Rust version). O código é compilado e testado contra releases estáveis do Rust. A versão mínima suportada do compilador é fixada com uma margem de aproximadamente três meses em relação aos releases recentes da linguagem.
O desenvolvimento é totalmente aberto. Todas as discussões acontecem na lista de discussão [email protected] e no canal #rust da comunidade oficial do Apache Iceberg no Slack.
Vale a Pena Experimentar
Se você está construindo serviços em torno de data warehouses, escrevendo conectores em Rust, ou desenvolvendo suas próprias ferramentas de processamento de dados, iceberg-rust parece ser a escolha mais lógica.
A biblioteca ainda está sendo refinada em termos de cobrir toda a especificação Iceberg, mas leitura básica, escrita e suporte para catálogos principais funcionam de forma estável. Para projetos baseados em DataFusion, já é um bloco de construção pronto para uso.
Projetos relacionados