Como Usar o Airflow: Um Guia Prático e Completo para Construir Pipelines de Dados Confiáveis
Se você move dados ou orquestra trabalhos de ML, provavelmente já ouviu o mesmo refrão: “É só colocar no Airflow”. A verdade é que o Apache Airflow se destaca quando você precisa de visibilidade, confiabilidade e controle sobre fluxos de trabalho complexos. Neste guia prático, vamos percorrer passo a passo como usar o Airflow — desde os conceitos básicos até padrões prontos para produção — para que você possa entregar pipelines nos quais confia.
Manteremos tudo prático: você terá um modelo mental para DAGs e tarefas, exemplos práticos com a API TaskFlow, opções de implantação, estratégias de teste e melhores práticas. No final, você passará de “Eu consigo executar o tutorial” para “Eu consigo executar isso em produção”.
Observação: Para análises mais aprofundadas e referências, a documentação oficial é excelente e regularmente atualizada.
O Que é Apache Airflow, Na Realidade?
Airflow é um orquestrador — não um processador de dados. Ele agenda, ordena e monitora o trabalho que você executa em outros lugares (bancos de dados, data warehouses, trabalhos do Spark, APIs, contêineres). Você define fluxos de trabalho como DAGs (Grafos Acíclicos Direcionados), que são apenas arquivos Python que codificam tarefas e suas dependências. O Airflow então executa essas tarefas de acordo com sua programação, parâmetros e ambiente.
- DAG: A definição do fluxo de trabalho (gráfico de tarefas com dependências).
- Tarefa: Uma unidade de trabalho (função Python, execução de SQL, comando Bash, gatilho de trabalho externo, etc.).
- Operador: Um modelo para um tipo de tarefa (por exemplo,
PythonOperator, BashOperator, KubernetesPodOperator).
- Agendador: Decide o que executar e quando.
- Executor: Executa tarefas (localmente, com Celery, Kubernetes, etc.).
- UI: Seu centro de controle para execuções, logs, retries e linhagem.
Comece com os tutoriais oficiais assim que instalar o Airflow; eles te dão uma visão geral rápida.
Instalando e Executando o Airflow da Maneira Correta
O Airflow é flexível. Escolha o caminho que corresponda ao seu estágio:
- Desenvolvimento local (início rápido):
- Use o Docker Compose de início rápido fornecido pelo projeto. Ele ativa o webserver, o agendador, o banco de dados e muito mais com configurações padrão sensatas.
- Ótimo para aprender e iterar em DAGs.
- Equipe pequena ou staging:
- Celery Executor ou Kubernetes Executor com um Postgres gerenciado.
- Armazene logs em S3/GCS e empacote as dependências com sua imagem ou
requirements.txt.
- Kubernetes Executor para elasticidade ou Celery Executor com workers de autoescalabilidade.
- Segredos externos (Vault), observabilidade robusta (logs + métricas) e deploys blue/green para upgrades.
Dica: Mantenha sua base de código do Airflow com controle de versão, containerizada e testada antes da promoção. A página de “Melhores Práticas” descreve padrões prontos para produção.
Conceitos Essenciais Que Você Usará Diariamente
DAGs: Seu Fluxo de Trabalho como Código
Um DAG é um arquivo Python que define:
- Metadados DAG: id, schedule, data de início, tags.
- Argumentos padrão: retries, owners, SLAs.
- Tarefas e suas dependências.
Pense em um DAG como o “o que” e “quando”, e nas tarefas como o “como”.
Tarefas e Operadores
Operadores são pré-fabricados para tarefas comuns. Exemplos:
- PythonOperator / TaskFlow
@task para código Python
- BashOperator para comandos shell
- SimpleHttpOperator para APIs
- KubernetesPodOperator para trabalhos containerizados
- Provedores SQL (por exemplo, Snowflake, BigQuery, Postgres) para trabalho de data warehouse
API TaskFlow: A Maneira Moderna e Pythonica
A API TaskFlow permite que você escreva tarefas como funções Python com @task, retorne valores que passam via XCom e as componha de forma limpa. Ela reduz o boilerplate e melhora a legibilidade — altamente recomendado.
Seu Primeiro DAG do Airflow (Edição TaskFlow)
Abaixo está um exemplo mínimo no estilo ETL para ilustrar ideias-chave: agendamento, TaskFlow, dependências e passagem de dados XCom.
from datetime import datetime
from airflow import DAG
from airflow.decorators import task
with DAG(
dag_id="weather_etl_example",
start_date=datetime(2024, 1, 1),
schedule="0 * * * *", # hourly
catchup=False,
tags=.
Agendamento, Catchup e Backfills
schedule: Cron ou presets (@daily, @hourly).
start_date + catchup: Se catchup=True, o Airflow fará backfill de execuções a partir da data de início. Para pipelines no estilo streaming, defina catchup=False.
- Backfills manuais: Use a UI ou CLI para reexecutar intervalos históricos.
Regra prática: habilite o catchup para trabalhos em lote determinísticos; desabilite para pipelines em tempo real ou com taxa limitada de API.
Passando Dados Entre Tarefas (XCom) Com Segurança
- Objetos pequenos: retornar valores com TaskFlow está bom.
- Cargas úteis grandes: armazene no armazenamento de objetos (S3/GCS) com uma chave no XCom.
- Evite dados confidenciais no XCom; use backends de segredos (por exemplo, Vault) e variáveis de ambiente.
Mapeamento Dinâmico de Tarefas e Workloads de Fan-out
O Airflow pode gerar tarefas dinamicamente em tempo de execução com base nas entradas — ideal para conjuntos de dados particionados ou trabalhos multi-tenant.
- Mantenha os DAGs determinísticos e idempotentes.
- Separe a orquestração (Airflow) da computação (Spark, dbt, data warehouses).
- Use a API TaskFlow para clareza e higiene do XCom.
- Parametrize os DAGs; use variáveis criteriosamente.
- Monitore, alerte e documente seus pipelines.
Como Trabalhar com Data Warehouses e ML
- Data warehouses: Use operadores de provedor (por exemplo, SnowflakeOperator, BigQueryInsertJobOperator) para trabalhos SQL. Armazene SQL em arquivos ou módulos versionados.
- dbt: Acione o dbt via Bash/KubernetesPodOperator ou operadores dbt dedicados em provedores.
- ML: Orquestre a geração de features, treinamento e inferência em lote como tarefas separadas; armazene artefatos em cache e registre métricas.
Agendamento Avançado: Datasets e Dependências Cross-DAG
- Datasets permitem que um DAG produza um dataset lógico que aciona outro DAG quando atualizado — mais limpo do que gatilhos ad-hoc.
- Para padrões legados, o ExternalTaskSensor funciona, mas os datasets são mais declarativos.
Segurança e Compliance
- Use o controle de acesso baseado em função (RBAC) na UI.
- Isole ambientes por equipe ou limite de confiança.
- Mantenha trilhas de auditoria por meio de logs e histórico de alterações de conexão.
Upgrades e Versionamento
- Teste upgrades em staging com workloads semelhantes aos de produção.
- Fixe e atualize os provedores deliberadamente.
- Leia as notas de lançamento para alterações e depreciações específicas do executor.
Um Checklist Rápido para Seu Primeiro DAG de Produção
- Propriedade clara (tag
owner) e alertas configurados.
retries definidos com backoffs razoáveis.
- Tarefas idempotentes e dependências explícitas.
- Cargas úteis XCom pequenas; dados grandes no armazenamento.
- Logs enviados para armazenamento durável; métricas exportadas.
- Plano de rollout (canary ou blue/green) e etapas de rollback.
Exemplo: Um DAG Realista de Carga de Data Warehouse
Este padrão extrai arquivos diários, valida-os e carrega-os em uma tabela de data warehouse, com mapeamento dinâmico por partição e sensores deferíveis.
from datetime import datetime
from airflow import DAG
from airflow.decorators import task
from airflow.sensors.filesystem import FileSensor
- Revise as Melhores Práticas antes de promover para produção.
- Explore a documentação do provedor para seus sistemas (data warehouses, clouds, ferramentas de ML).
A propósito: Acelere a criação com um ajudante de IA
Vale a pena notar: se você esboça muitos DAGs, um assistente de IA que entende de código pode acelerar o boilerplate, gerar stubs de TaskFlow e até sugerir correções de dependência. Se você quiser um ajudante leve ao lado do seu editor e navegador, o Sider.AI pode ser útil para reescritas e explicações rápidas de código durante o desenvolvimento. Principais Conclusões
- Use o Airflow para orquestrar, não para computar.
- Prefira a API TaskFlow para DAGs limpos e testáveis.
- Mantenha os dados fora do XCom; passe referências em vez disso.
- Use sensores/operadores deferíveis para economizar slots.
- Containerize, teste e promova através de ambientes.
- Confie nos tutoriais oficiais e nas melhores práticas como sua estrela guia.
FAQ
Q1: Qual é a maneira mais fácil de aprender como usar o Airflow?
Comece com o Tutorial oficial para entender DAGs, tarefas, agendamento e a UI. Em seguida, construa um pequeno pipeline baseado em TaskFlow e itere com o guia de melhores práticas para estar pronto para produção.
Q2: Devo usar a API TaskFlow ou operadores clássicos no Airflow?
Use a API TaskFlow para a maioria dos pipelines Pythonic porque é mais limpa e lida com retornos XCom naturalmente. Os operadores clássicos ainda são ótimos para tarefas não Python como Bash, SQL ou trabalhos de contêiner.
Q3: Como faço para passar grandes quantidades de dados entre as tarefas do Airflow?
Evite colocar grandes cargas úteis no XCom. Armazene dados em S3/GCS ou em um banco de dados e passe apenas referências ou URIs através do XCom para manter as tarefas rápidas e confiáveis.
Q4: Qual executor devo escolher para o Airflow em produção?
Para elasticidade e isolamento, o Kubernetes Executor é um padrão forte. Para configurações mais simples, o Celery Executor funciona bem — apenas garanta autoescalabilidade, registro robusto e segredos externalizados.
Q5: Como gerencio dependências entre vários DAGs do Airflow?
Use Datasets para gatilhos cross-DAG declarativos quando um pipeline produz dados para outro. Alternativamente, o ExternalTaskSensor pode coordenar execuções, mas os Datasets são mais limpos para orquestração orientada a dados.