Ir para o conteúdo principal
Voltar aos artigos

Em streaming, a hora passou. Os dados ficaram prontos?

O mecanismo do Pinterest explicita a prontidão de partições com watermarks, expondo o compromisso entre atraso tolerado e completude.

·3 min de leitura·24 visualizações

O Pinterest apresentou um mecanismo para sinalizar quando partições alimentadas continuamente por CDC estão suficientemente completas para consumo analítico.[14] Em vez de usar apenas o término do intervalo do relógio, a solução acompanha o progresso do tempo dos eventos.[14] O problema descrito é que dados atrasados podem chegar depois de o período aparentemente ter terminado.[14]

Minha leitura é que essa é uma discussão de contrato, não apenas de streaming. Um consumidor precisa saber o que “pronto” significa antes de gerar um relatório, concluir uma conciliação ou disparar outra automação.

O que muda para quem desenvolve

A plataforma descrita combina Kafka, Flink, Spark e Iceberg, coletando estatísticas de tempo do evento nos checkpoints do Flink.[14] Um t-digest representa a distribuição de forma compacta nos metadados do snapshot Iceberg.[14]

Após o commit, o sistema calcula um watermark de finalização com checkpoints recentes e o publica como propriedade da tabela.[14] A política padrão considera o menor tempo observado em uma quantidade configurável de commits, enquanto políticas baseadas em percentis podem reduzir atraso aceitando menor completude.[14]

A consequência arquitetural, na minha leitura, é separar chegada dos dados e permissão de consumo. Recomendo que o consumidor consulte uma evidência explícita de prontidão, em vez de assumir que um horário agendado equivale a uma partição completa.

Como aplicar

Não comece copiando a infraestrutura. Monte um experimento pequeno com eventos que tenham dois horários: o do acontecimento e o da chegada. Use registros sintéticos, incluindo alguns entregues fora de ordem.

Defina uma regra de prontidão e produza o mesmo relatório de duas maneiras: encerrando pelo relógio e esperando o marcador escolhido. Compare quais eventos entram em cada resultado e quanto tempo cada versão demora a ficar disponível.

Depois envie um evento ainda mais atrasado. Escreva o comportamento esperado: recalcular o relatório, emitir uma correção ou manter uma versão com incompletude conhecida. O teste só está completo quando essa decisão também é verificável.

Em uma aplicação menor, recomendo avaliar um checkpoint explícito ou marcador transacional antes de adotar uma plataforma de streaming. O mecanismo escolhido deve comunicar o estado que o próximo componente precisa conhecer, sem exigir que ele deduza prontidão a partir de um job ou de um horário.

Cuidados e limites

O watermark descrito é monotônico: não retrocede quando aparece um registro atrasado.[14] Portanto, ele é um critério operacional de consumo, não uma promessa de que nenhum evento tardio existirá.[14]

Esse limite precisa aparecer na documentação da saída. Recomendo registrar a política de atraso tolerado e como corrigir resultados já consumidos. Sem isso, dois relatórios podem divergir e ninguém saber se houve erro ou apenas uma escolha diferente de completude.

A decisão não é eliminar toda espera nem esperar para sempre. É declarar qual atraso o produto aceita, qual dado pode faltar e o que acontece quando a realidade ultrapassa esse contrato.

Fonte

[14] Fonte: InfoQ. Publicação: 19/10/2026 às 11:37.

Continue lendo