Definir o modo de streaming do pipeline

O Dataflow é compatível com dois modos de jobs de streaming:

  • Modo "Exatamente uma vez". Esse modo é o padrão para todos os jobs de streaming do Dataflow. Nesse modo, o Dataflow garante que os registros não sejam descartados ou duplicados à medida que os dados se movem pelo pipeline.
  • Modo "Pelo menos uma vez". Esse modo garante que os registros sejam processados pelo menos uma vez (ou seja, nenhum registro de entrada é perdido). No entanto, é possível gerar cópias de registros nesse modo. Para casos de uso que podem tolerar cópias, o modo pelo menos uma vez pode reduzir significativamente o custo e a latência do job.

Escolher o modo de streaming a ser usado

Escolha o modo "Exatamente uma vez" se precisar garantir resultados exatos do pipeline e semântica previsível. Por exemplo:

  • Pipelines com agregações, como contagem, soma ou média.
  • Casos de uso críticos para os negócios que dependem do processamento de registros apenas uma vez. Os exemplos incluem detecção de fraudes, detecção de ameaças à rede e painéis de inventário de e-commerce.

Escolha o modo de streaming "Pelo menos uma vez" se a carga de trabalho puder tolerar cópias de registros e se beneficiar da redução de custo ou latência. Por exemplo:

  • Cargas de trabalho em que a eliminação de duplicação é realizada downstream pelo Dataflow. Por exemplo, pipelines que gravam no BigQuery ou em um repositório de dados SQL.
  • Pipelines somente de mapa sem agregações. Os exemplos incluem processamento de registros, captura de dados alterados ou jobs de extração, transformação e carregamento (ETL, na sigla em inglês), em que o pipeline executa apenas transformações por elemento, como conversão de esquemas.
  • Pipelines em que o coletor de saída não pode garantir uma entrega exatamente uma vez, como o Pub/Sub. Nesse caso, a eliminação de duplicação dentro do pipeline pode ser desnecessária, e é possível se beneficiar da latência e do custo reduzidos do modo de streaming "Pelo menos uma vez".
  • Pipelines que leem do Pub/Sub. A leitura do Pub/Sub é significativamente otimizada ao usar o modo "Pelo menos uma vez".

Outras considerações

  • O modo "Pelo menos uma vez" pode reduzir significativamente o custo e a latência de um pipeline. O impacto exato depende das especificidades do pipeline. Teste o streaming "Pelo menos uma vez" em cargas realistas para avaliar o impacto.

  • No modo "Pelo menos uma vez", a taxa de cópias de registros depende do número de tentativas. A taxa de referência costuma ser baixa (<1%). No entanto, poderão ocorrer picos se os nós de trabalho falharem ou outras condições causarem chamadas RPC repetidas.

  • O modo de streaming afeta como o Streaming Engine processa registros, mas não altera a semântica dos conectores de E/S. É recomendável alinhar sua semântica de E/S com o modo de streaming. Por exemplo, se você usar o modo de streaming "Pelo menos uma vez" com o conector de E/S do BigQuery, defina o modo de gravação como STORAGE_API_AT_LEAST_ONCE. Os modelos do Dataflow fornecidos pelo Google ativam automaticamente essa opção quando você usa o streaming "Pelo menos uma vez".

  • Transformações referentes a elemento, como Map, nem sempre são idempotentes. Por exemplo, considere uma função que recebe uma mensagem e anexa o carimbo de data/hora atual a ela. Nesse caso, uma cópia de registro pode produzir várias saídas distintas. O modo "Pelo menos uma vez" pode não ser apropriado para esse pipeline.

Definir o modo de streaming

O processamento "Exatamente uma vez" é a configuração padrão para todos os jobs do Dataflow. Para ativar o modo de streaming "Pelo menos uma vez", defina a opção de serviço streaming_mode_at_least_once.

Java

--dataflowServiceOptions=streaming_mode_at_least_once

Python

--dataflow_service_options=streaming_mode_at_least_once

Go

--dataflow_service_options=streaming_mode_at_least_once

Se você não especificar a opção streaming_mode_at_least_once, o Dataflow usará o modo de streaming "Exatamente uma vez".

Se você definir a opção streaming_mode_at_least_once, o Dataflow ativará automaticamente o Streaming Engine com o faturamento baseado em recursos.

Para atualizar o modo de streaming em um job em execução, interrompa o job atual e execute um job substituto. Para mais informações, consulte Iniciar um job substituto.

Selecionar o modo de streaming de um modelo

Para selecionar o modo de streaming ao executar um modelo de streaming do Dataflow, siga estas etapas:

Console

  1. No console do Google Cloud, acesse a página Jobs do Dataflow.

    Acessar "Jobs"

  2. Clique em Criar job usando um modelo.

  3. Selecione o modelo que você quer executar no menu suspenso Modelo do Dataflow.

  4. Em Modo de streaming, selecione o modo de streaming. Se o modelo oferecer suporte apenas a um modo, essa opção será desativada.

gcloud

Para ativar o modo pelo menos uma vez, defina a opção streaming_mode_at_least_once na flag additional-experiments:

--additional-experiments=streaming_mode_at_least_once

Para ativar o modo do tipo único, defina a opção streaming_mode_exactly_once na flag additional-experiments:

--additional-experiments=streaming_mode_exactly_once

Essas duas opções são mutuamente exclusivas. Se você não definir uma dessas opções, o modelo usará um modo de streaming determinado pelos metadados do modelo. Para mais informações, consulte Modelos personalizados.

REST

Use o campo additionalExperiments nos objetos FlexTemplateRuntimeEnvironment (modelos Flex) ou RuntimeEnvironment (modelos clássicos).

{
  additionalExperiments : ["streaming_mode_at_least_once"]
  ...
}

Modelos personalizados

Se você criar um modelo personalizado compatível com o processamento "Pelo menos uma vez", adicione os seguintes campos de nível superior ao arquivo de metadados do modelo:

{
  "streaming": true,
  "supportsAtLeastOnce": true,
  "supportsExactlyOnce": true,
  "defaultStreamingMode": "AT_LEAST_ONCE"
}

Esses campos de metadados permitem que os usuários selecionem o modo de streaming ao implantar o modelo no console do Google Cloud. O campo defaultStreamingMode é opcional e especifica o modo de streaming padrão para o modelo. Se você não especificar defaultStreamingModeg e o modelo for compatível com os dois modos, o modo exatamente uma vez será o padrão.

Para mais informações, consulte as seguintes seções na documentação de modelos do Dataflow:

Ver o modo de streaming de um job

Para ver o modo de streaming de um job, acesse a página Jobs no console do Google Cloud.

Acessar "Jobs"

O modo de streaming também é listado na página de detalhes do job, no painel Informações do job.

Limitações

O modo de streaming "Pelo menos uma vez" requer o Streaming Engine com o faturamento baseado em recursos.

Preços

O modo "Pelo menos uma vez" sempre usa o faturamento baseado em recursos, em que a cobrança é gerada conforme o total de recursos consumidos pelo job.

O custo unitário das unidades de computação do Streaming Engine é igual, independentemente do modo de streaming. Porém, na maioria dos casos, um pipeline consome significativamente menos recursos totais ao usar o modo "Pelo menos uma vez".

A seguir