Entendendo o batman pequenininho na prática
O batman pequenininho é uma ferramenta de automação de fluxos de dados que muita gente pega sem ler a documentação e depois se perde. Ela funciona como um broker leve entre sistemas legados e pipelines modernos, interceptando mensagens em formato JSON, transformando campos com base em regras configuráveis, e encaminhando para o destino correto. O nome vem de um projeto interno que virou open source, e o "pequeninho" é meio irônico porque o pacote inteiro cabe em menos de 200KB. A instalação é simples. Roda um pip install batman-pequeninho e você já tem o binário disponível. O problema é a configuração inicial. O arquivo padrão de setup espera que você defina três coisas: origem, destino e transformações. Se pular alguma, o serviço sobe mas não processa nada, e o log fica mudo. Passei uma manhã inteira assim antes de perceber que o parâmetro mode precisava estar explícito, mesmo que com valor padrão.
Como configurar o batman pequenininho do zero
Comece criando um diretório de trabalho e copiando o template que vem no pacote. O comando é batman-pequeninho init --template default. Isso gera três arquivos: source.yaml, target.yaml, e transforms.yaml. Edite cada um separadamente. A fonte geralmente é uma fila RabbitMQ ou um endpoint HTTP. O destino pode ser um banco PostgreSQL ou outra API REST. As transformações são o coração — são scripts Python que rodam sobre cada mensagem, e você pode encadear quantas quiser. Um detalhe que quase ninguém menciona: o campo batch_size dentro do source. Se você deixar no padrão (100) e estiver processando mensagens grandes, o consumo de memória vai disparar. Eu ajustei para 25 em um projeto onde cada payload vinha com cerca de 400KB de dados aninhados, e o throughput caiu apenas 12%, enquanto a Stable RAM usage foi de 800MB para 120MB. Vale o trade-off na maioria dos casos.
👉 Clique no botão abaixo para saber mais sobre o assunto!
O erro mais comum é configurar múltiplas transformações na mesma pipeline sem pensar na ordem. Cada transformador recebe o resultado do anterior, então se a primeira remove um campo que a segunda precisa, o sistema não alerta — ele simplesmente ignora. Configure sempre com o flag --dry-run antes de subir em produção. Ele mostra o fluxo completo de uma mensagem de teste sem enviar nada para o target. Outro ponto que causa dor de cabeça é o versionamento de schemas. Se a API que alimenta sua source mudar um campo e você não atualizar o transformador correspondente, o batman pequenininho vai tentar castar tipos incompatíveis e travar a fila inteira. Implementei um tratamento de exceção personalizado dentro do transformador que loga o campo problemático e pula a mensagem, enviando para umaDLQ ao invés de parar o processamento. O código é direto: um try-catch em volta da função main do transformador com redirecionamento para o tópico dlq.mensagem.
Se o seu cenário exige baixa latência (
10ms por mensagem), o batman pequenininho não é a melhor escolha. Ele foi desenhado para throughput, não para delay. Nesse caso, um processador stream como Apache Flink ou até um script em Go bem afiado resolve mais rápido. Para batch processes, integrações ETL intermediárias, ou migração de sistemas antigos sem tempo de reescrever tudo, o batman pequenininho continua sendo uma das opções mais razoáveis do mercado. Custa zero, documentação razoável, e uma comunidade pequena mas ativa no GitHub que responde issues em dias úteis.