Pipelines de streaming

PCollections ilimitadas ou coleções ilimitadas, representam dados em pipelines de streaming. Uma coleção ilimitada contém dados de uma origem de dados atualizada continuamente, como do Pub/Sub.

Não é possível usar apenas uma chave para agrupar elementos em uma coleção ilimitada. Pode haver infinitos elementos para uma determinada chave nos dados de streaming, visto que a origem de dados adiciona novos elementos constantemente. É possível usar janelas, marcas d'água e gatilhos para agregar elementos em coleções ilimitadas.

O conceito de janelas também se aplica a PCollections limitadas que representam dados em pipelines em lote. Para informações sobre janelas em pipelines em lote, consulte a documentação do Apache Beam para Gestão de janelas com PCollections limitadas.

Janelas e funções de gestão de janelas

As funções de gestão de janelas dividem as coleções ilimitadas em componentes lógicos ou janelas. Elas agrupam as coleções ilimitadas pelos carimbos de data/hora dos elementos individuais. Cada janela contém um número finito de elementos.

As janelas a seguir são definidas com o SDK do Apache Beam (em inglês) ou as extensões de streaming do Dataflow SQL:

Janelas em cascata

Uma janela em cascata representa um intervalo consistente e separado no fluxo de dados.

Por exemplo, se você definir uma janela em cascata de 30 segundos, os elementos com valores de carimbo de data/hora [00:00:00-00:00:30:30" estarão na primeira janela. Elementos com valores de carimbo de data/hora [0:00:30-0:01:00] estarão na segunda janela.

A imagem a seguir ilustra como os elementos são divididos em janelas em cascata de 30 segundos.

Uma imagem que mostra janelas em cascata com 30 segundos de duração

Janelas de salto

As janelas de salto representam um intervalo consistente no fluxo de dados. As janelas de salto podem se sobrepor, enquanto as janelas em cascata são separadas.

Por exemplo, uma janela de salto pode começar a cada 30 segundos e capturar 1 minuto de dados e a janela. A frequência com que janelas de salto começam é conhecida como período. Este exemplo tem uma janela de um minuto e um período de 30 segundos.

A imagem a seguir ilustra como os elementos são divididos em janelas deslizantes de um minuto com um período de 30 segundos.

Uma imagem que mostra janelas de salto com 1 minuto de duração de janela e 30 segundos de período de janela

Para calcular a média de dados em execução, use as janelas de salto. Use janelas de salto de um minuto com um período de 30 segundos para calcular uma média de execução de um minuto a cada 30 segundos.

Janelas de sessão

Uma janela de sessão contém elementos dentro de uma duração de intervalo de outro elemento. A duração de intervalo é um intervalo entre os novos dados em um fluxo. Se os dados chegarem após a duração de intervalo, eles serão atribuídos a uma nova janela.

Por exemplo, as janelas de sessão podem dividir um fluxo de dados que representa a atividade do mouse do usuário. Esse fluxo pode ter longos períodos de tempo de inatividade intercalados com muitos cliques. Uma janela de sessão pode conter os dados gerados pelos cliques.

A janela de sessão atribui janelas diferentes a cada chave de dados. As janelas em cascata e de salto contêm todos os elementos no intervalo especificado, independentemente das chaves de dados.

Na imagem a seguir, mostramos como os elementos são divididos em janelas de sessão.

Uma imagem que mostra janelas de sessão com uma duração de intervalo mínima

Marcas-d'água

Uma marca d'água é um limite que indica quando o Dataflow espera que todos os dados em uma janela tenham chegado. Se novos dados chegarem com um carimbo de data/hora na janela, mas mais antigos que a marca d'água, os dados serão considerados dados atrasados.

O Dataflow rastreia marcas d'água por conta do seguinte:

  • Não há garantias de que os dados cheguem em ordem de horário ou em intervalos previsíveis.
  • Não é garantido que os eventos de dados apareçam em pipelines na mesma ordem em que foram gerados.

A origem de dados determina a marca d'água. É permitido usar dados atrasados com o SDK do Apache Beam. O Dataflow SQL não processa dados atrasados.

Gatilhos

Os gatilhos determinam quando emitir resultados agregados conforme os dados chegam. Por padrão, os resultados são emitidos quando a marca d'água passa o final da janela.

É possível usar o SDK do Apache Beam para criar ou modificar gatilhos para cada coleção em um pipeline de streaming. Não é possível definir gatilhos com Dataflow SQL.

O SDK do Apache Beam pode definir gatilhos (em inglês) que operam em qualquer combinação das seguintes condições:

  • Hora do evento, conforme indicado pelo carimbo de data/hora em cada elemento de dados.
  • Tempo de processamento, que é o tempo em que o elemento de dados é processado em um determinado estágio no pipeline.
  • O número de elementos de dados em uma coleção.