Outputs
Um Output é a peça que entrega o dado no sistema final. Ele é a ponta da pipeline: consome de um tópico e não produz nada para frente.
| Output | Para onde entrega | Bom para |
|---|---|---|
| HTTP | Uma URL, via POST | Chamar a API de outro sistema |
| Kafka | Um tópico Kafka | Devolver o dado para o ecossistema Kafka |
| SFTP | Um servidor SFTP | Entregar arquivos |
| SMB | Um compartilhamento de rede | Entregar arquivos em rede corporativa |
| Elasticsearch | Um índice Elasticsearch | Busca e análise |
| GCS | Um bucket do Google Cloud Storage | Data lake |
| Snowflake | Tabelas do Snowflake | Data warehouse |
| PostgreSQL | Tabelas do PostgreSQL | Réplica operacional |
O que cada Output exige da mensagem
Nem todo Output aceita qualquer mensagem. Esta é a divisão que mais causa dúvida:
| Grupo | Outputs | O que exige |
|---|---|---|
| Repassam tudo | HTTP, Kafka | Nada. Entregam o que chegar. |
| Gravam o Value | SFTP, SMB, Elasticsearch, GCS | Um Value útil — Elasticsearch e GCS em Parquet exigem que ele seja JSON. Cada página descreve o que acontece com uma mensagem de Value vazio. |
| Aplicam mudanças em tabelas | Snowflake, PostgreSQL | Headers próprios (op, schema, table). Na prática, só funcionam com um Input de SQL Server CDC na frente — o contrato completo está na página de cada um: PostgreSQL e Snowflake. |
Mensagens de Value vazio
Uma mensagem pode chegar sem conteúdo — é o caso das exclusões vindas do SQL Server CDC, em que a identificação da linha viaja na Key. Cada Output reage de um jeito:
| Output | O que acontece |
|---|---|
| Elasticsearch | Descarta a mensagem em silêncio |
| GCS em Parquet | Descarta a linha, com aviso no log |
| SFTP, SMB, GCS em JSON | Gravam uma linha em branco no arquivo |
| HTTP | Envia a requisição com corpo vazio |
| Kafka | Republica a mensagem como veio |
| PostgreSQL, Snowflake | Apagam a linha correspondente no destino |
Quando a pipeline vem de um CDC e o destino não deve receber exclusões, as duas saídas são marcar Ignorar deletes no Input ou descartá-las com um Transform.
Duas formas de gravar
Os Outputs se dividem também pelo momento em que gravam:
- Por mensagem — HTTP e Kafka entregam uma a uma, assim que chega.
- Por lote — os demais acumulam e gravam de uma vez. Cada um tem seus próprios ajustes de tamanho de lote e tempo de espera, e o lote fecha pelo que vier primeiro.
Lotes maiores rendem mais por gravação e consomem mais memória. Os padrões de cada Output já são um bom ponto de partida; mexer neles é otimização, não configuração inicial.
Arquivos e o conceito de "roll"
SFTP, SMB e GCS não fecham um arquivo a cada mensagem — isso criaria milhares de arquivos minúsculos. Eles vão preenchendo um arquivo, uma linha por mensagem, e o fecham quando um critério é atingido:
- SFTP e SMB fecham por inatividade: passou X segundos sem mensagem nova, o arquivo é finalizado.
- GCS fecha por tempo decorrido: a cada X segundos o arquivo é fechado, tendo chegado mensagem ou não.
Nos três, o arquivo é escrito com um nome temporário e só recebe o nome final quando é fechado. Um consumidor que fique olhando a pasta deve considerar apenas os arquivos com o nome final.