Streaming com o Pub/Sub

Nesta página, apresentamos uma visão geral conceitual da integração do Dataflow com o Pub/Sub. A visão geral descreve algumas otimizações que estão disponíveis na implementação do executor do Dataflow do conector de E/S do Pub/Sub. O Pub/Sub é um sistema de processamento e entrega de eventos durável e escalonável. O Dataflow complementa o modelo de entrega escalonável pelo menos uma vez do Pub/Sub com eliminação de duplicação de mensagem e processamento sequencial exatamente uma vez, se você usar janelas e armazenamento em buffer. Para usar o Dataflow, grave seu pipeline usando o SDK do Apache Beam e execute o código do pipeline no serviço Dataflow.

Antes de começar, conheça os conceitos básicos do Apache Beam e dos pipelines de streaming. Leia os seguintes recursos para mais informações:

Como criar pipelines de streaming com o Pub/Sub

Para aproveitar os benefícios da integração do Dataflow com o Pub/Sub, você pode criar seus pipelines de streaming de uma das seguintes maneiras:

Recursos de integração do Pub/Sub com o Dataflow

O Apache Beam fornece uma implementação de origem de E/S de referência (PubsubIO) para o Pub/Sub (Java e Python), que é usada por executores que não são do Dataflow, como o executor do Apache Spark, o executor do Apache Flink e o executor direto.

No entanto, o executor do Dataflow usa uma implementação diferente e particular de PubsubIO. Essa implementação aproveita as APIs e os serviços internos do Google Cloud para oferecer três vantagens principais: marcas d'água de baixa latência, alta precisão de marca d'água, que favorece a integridade de dados, e eliminação de duplicação eficiente.

A implementação de PubsubIO do executor do Dataflow confirma automaticamente as mensagens depois que elas são gravadas no armazenamento permanente, seja em ordem aleatória ou em um coletor. Portanto, as mensagens só são confirmadas quando o Dataflow pode garantir que não haja perda de dados se algum componente falhar ou se uma conexão for perdida.

Marcas d'água de baixa latência

O Dataflow tem acesso à API privada do Pub/Sub que fornece o tempo da mensagem não confirmada mais antiga em uma assinatura, com uma latência menor do que a disponível no Cloud Monitoring. Para fins de comparação, as métricas de backlog do Pub/Sub que estão disponíveis no Cloud Monitoring geralmente têm um atraso de dois a três minutos, mas as métricas têm um atraso de cerca de dez segundos apenas para o Dataflow. Isso permite que o Dataflow avance as marcas d'água do pipeline e emita os resultados da computação em janela em menos tempo.

Alta precisão da marca d'água

Outro problema importante resolvido nativamente pela integração do Dataflow com o Pub/Sub é a necessidade de uma marca d'água robusta para as janelas definidas na hora do evento. O horário do evento é um carimbo de data/hora especificado pelo aplicativo do editor como um atributo de uma mensagem do Pub/Sub, em vez do campo publish_time definido em uma mensagem pelo próprio serviço do Pub/Sub. Como o Pub/Sub calcula as estatísticas do backlog somente em relação aos carimbos de data/hora atribuídos pelo serviço (ou tempo de processamento), a estimativa da marca d'água de hora do evento requer um mecanismo separado.

Para resolver esse problema, se o usuário optar por usar os carimbos de data/hora do evento personalizados, o serviço Dataflow criará uma segunda assinatura de rastreamento. Essa assinatura de rastreamento é usada para inspecionar as horas do evento das mensagens no backlog da assinatura de base e fazer uma estimativa do backlog da hora anterior. Consulte a página do StackOverflow que explica como o Dataflow calcula marcas d'água do Pub/Sub para mais informações.

Eliminação de duplicação eficiente

A eliminação de duplicação de mensagens é necessária para o processamento único de mensagens. O Dataflow elimina a duplicação de mensagens em relação ao identificador da mensagem do Pub/Sub. Portanto, toda lógica de processamento pode presumir que as mensagens já são exclusivas em relação ao identificador da mensagem do Pub/Sub. O mecanismo de agregação incremental e eficiente para conseguir isso é abstraído na API PubsubIO.

Se PubsubIO estiver configurado para usar IDs de mensagem personalizados, o Dataflow elimina a duplicação de mensagens mantendo uma lista de todos os IDs personalizados que viu nos últimos 10 minutos. Se o ID de uma nova mensagem estiver nessa lista, a mensagem será considerada uma cópia e será descartada.