Pular para o conteúdo principal

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.

OutputPara onde entregaBom para
HTTPUma URL, via POSTChamar a API de outro sistema
KafkaUm tópico KafkaDevolver o dado para o ecossistema Kafka
SFTPUm servidor SFTPEntregar arquivos
SMBUm compartilhamento de redeEntregar arquivos em rede corporativa
ElasticsearchUm índice ElasticsearchBusca e análise
GCSUm bucket do Google Cloud StorageData lake
SnowflakeTabelas do SnowflakeData warehouse
PostgreSQLTabelas do PostgreSQLRéplica operacional

O que cada Output exige da mensagem

Nem todo Output aceita qualquer mensagem. Esta é a divisão que mais causa dúvida:

GrupoOutputsO que exige
Repassam tudoHTTP, KafkaNada. Entregam o que chegar.
Gravam o ValueSFTP, SMB, Elasticsearch, GCSUm 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 tabelasSnowflake, PostgreSQLHeaders 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:

OutputO que acontece
ElasticsearchDescarta a mensagem em silêncio
GCS em ParquetDescarta a linha, com aviso no log
SFTP, SMB, GCS em JSONGravam uma linha em branco no arquivo
HTTPEnvia a requisição com corpo vazio
KafkaRepublica a mensagem como veio
PostgreSQL, SnowflakeApagam 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.