Pular para o conteúdo

Conceitos

Tempo do evento, janelas e marcas d'água

Intuição

Imagine contar quantas cartas foram escritas em cada dia, mas as cartas chegam ao correio com atrasos diferentes: uma escrita na segunda só aparece na quinta. Se você agrupar pelo dia em que a carta chegou, a conta fica errada; o certo é agrupar pelo dia em que foi escrita. Só que nunca dá para ter certeza de que todas as cartas de segunda já chegaram, então você precisa decidir quando divulgar um resultado provisório e o que fazer quando uma carta atrasada aparecer depois.

Como funciona

O modelo Dataflow separa dois domínios de tempo: o tempo do evento (quando o evento de fato ocorreu, que essencialmente nunca muda) e o tempo de processamento (quando o pipeline o observa, segundo o relógio do sistema). Atrasos de comunicação, escalonamento e serialização criam uma defasagem (skew) dinâmica entre os dois. Para dados ilimitados, o janelamento fatia o fluxo em pedaços finitos no tempo do evento: janelas fixas (tumbling) de tamanho estático, janelas deslizantes com tamanho e período de deslizamento (a fixa é o caso em que os dois coincidem) e sessões, delimitadas por um tempo limite de inatividade, em geral por chave. Para generalizar, o modelo trata todas as janelas como não alinhadas e usa duas operações: AssignWindows atribui cada elemento a zero ou mais janelas, e MergeWindows funde janelas no agrupamento (GroupByKeyAndWindow), o que permite que sessões se unam quando chegam eventos intermediários. A marca d'água (watermark) é um limite inferior sobre os tempos de evento já processados; na maioria dos casos reais é heurística, pois o sistema não sabe, por exemplo, quando um celular sem conexão voltará a enviar dados. Como ela às vezes é rápida demais (deixa dados atrasados para trás) e às vezes lenta demais (por ser global, um único dado lento segura o pipeline), entram os gatilhos (triggers), que definem quando, no tempo de processamento, emitir o resultado de uma janela e podem produzir vários painéis (panes) por janela; há gatilhos por marca d'água (inclusive percentual), por tempo de processamento, por contagem de dados e composições deles. Os modos de acumulação relacionam painéis sucessivos: descartante (cada painel é independente), acumulante (cada painel refina o anterior, mantendo o estado) e acumulante e retratante (emite a retratação do valor anterior antes do novo, necessário quando agrupamentos em série espalham resultados parciais por chaves diferentes). Tudo isso se resume em quatro perguntas: o que se calcula, onde no tempo do evento, quando no tempo de processamento e como os refinamentos se relacionam.

Na prática

É o raciocínio por trás de pipelines de cobrança, estatísticas agregadas, detecção de abuso e de anomalias, recomendações e sessões de usuário em streaming: o artigo associa cobrança a gatilhos, acumulação e retratação, e detecção de abuso a marcas d'água percentuais. Como o modelo separa a lógica do pipeline de sua execução física, escolher batch, micro-batch ou streaming vira uma troca entre correção, latência e custo, sem reescrever a lógica. Os autores o apresentam como alternativa à arquitetura Lambda, que exige manter dois sistemas e só é correta se a entrada estiver completa quando o batch roda; a regra de projeto é nunca depender de uma noção de completude.

Use em um desenho

Pratique na escola de System Design os casos que dependem deste conceito.