Arquitetura¶
O FlumenData implementa uma arquitetura lakehouse moderna que combina o melhor dos data lakes e data warehouses.
Visão Geral¶
graph TB
subgraph "Tier 1 - Data Platform"
SPARK[Apache Spark 4.0.1<br/>Master + 2 Workers]
HIVE[Hive Metastore 4.1.0<br/>Catalog Service]
end
subgraph "Tier 0 - Foundation"
POSTGRES[PostgreSQL 17.6<br/>Metadata Store]
MINIO[MinIO<br/>Object Storage]
end
subgraph "Data Layer"
DELTA[Delta Lake 4.0<br/>ACID Tables]
end
SPARK --> HIVE
SPARK --> DELTA
DELTA --> MINIO
HIVE --> POSTGRES
HIVE --> MINIO
SPARK --> MINIO
Camadas da Arquitetura¶
1. Camada de Armazenamento (Tier 0)¶
MinIO - Object Storage¶
- Função: armazenamento de objetos compatível com S3 para todas as tabelas
- Tecnologia: MinIO (API S3)
- Portas: 9000 (API) e 9001 (Console)
- Formato: arquivos Parquet organizados pelo Delta Lake
- Estrutura de buckets:
PostgreSQL - Backend de Metadados¶
- Função: armazenar o catálogo do Hive Metastore
- Tecnologia: PostgreSQL 17.6
- Porta: 5432
- Armazena:
- Definições de banco e tabela
- Schemas e partições
- Estatísticas e locais (paths S3A)
2. Camada de Metadados (Tier 1)¶
Hive Metastore¶
- Função: catálogo centralizado do lakehouse
- Tecnologia: Apache Hive 4.1.0 (metastore standalone)
- Porta: 9083 (Thrift)
- Arquitetura:
- API Thrift para metadados
- Namespace em 2 níveis (
database.table) - Metadados persistidos no PostgreSQL
- Compatível com Spark, Trino, Presto
- Recursos: transações ACID, evolução de schema, gerenciamento de partições, estatísticas
3. Camada de Computação (Tier 1)¶
Cluster Apache Spark¶
- Função: engine distribuída para consultas e processamento
- Tecnologia: Apache Spark 4.0.1
- Portas: 7077 (Master) e 8080 (UI)
- Componentes:
- Master: coordenação e agendamento de jobs
- Workers (x2): executam tarefas com 2 vCPUs e 2 GB de RAM cada
4. Camada de Formato de Tabelas¶
Delta Lake¶
- Função: formato ACID com time travel
- Tecnologia: Delta Lake 4.0
- Recursos: ACID, evolução de schema, histórico de versões, unificação batch/streaming
- Estrutura:
Fluxo de Dados¶
1. Escrita¶
sequenceDiagram
participant User
participant Spark
participant Hive
participant Postgres
participant Delta
participant MinIO
User->>Spark: CREATE TABLE / INSERT
Spark->>Hive: Registrar metadados
Hive->>Postgres: Persistir schema
Spark->>Delta: Escrever dados + log de transação
Delta->>MinIO: Guardar arquivos Parquet
MinIO-->>Delta: Confirmar escrita
Delta-->>Spark: Transação concluída
Spark-->>User: Sucesso
- Usuário envia consulta para o Spark
- Spark consulta o Hive Metastore
- Hive grava/atualiza metadados no PostgreSQL
- Spark grava usando o formato Delta Lake
- Arquivos Parquet vão para o MinIO
- Delta registra o log (_delta_log)
- Resultado é retornado
2. Leitura¶
sequenceDiagram
participant User
participant Spark
participant Hive
participant Postgres
participant Delta
participant MinIO
User->>Spark: SELECT
Spark->>Hive: Buscar metadados
Hive->>Postgres: Ler schema
Postgres-->>Hive: Retornar schema
Hive-->>Spark: Metadados
Spark->>Delta: Planejar query
Delta->>MinIO: Ler Parquet
MinIO-->>Delta: Retornar dados
Delta-->>Spark: Dados + estatísticas
Spark-->>User: Resultado
- Usuário executa SELECT
- Spark consulta o Hive Metastore (schema no PostgreSQL)
- Delta Lake lê o log para planejar
- Apenas as partições necessárias são lidas do MinIO
- Resultado é retornado
Interações entre Componentes¶
Spark ↔ Hive Metastore¶
- Protocolo Thrift (9083)
- Criação de tabelas, evolução de schema, partições, estatísticas
Spark ↔ MinIO¶
- Protocolo S3A (HTTP na porta 9000)
- Leitura/escrita de Parquet e logs Delta
Hive ↔ PostgreSQL¶
- Protocolo JDBC
- Persistência de metadados, partições e versões de schema
Delta Lake ↔ MinIO¶
- Leiaute ACID (_delta_log) + arquivos Parquet
- Time travel e transações dependem da integridade do bucket
lakehouse