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
No console do Google Cloud, acesse a página Jobs do Dataflow.
Clique em Criar job usando um modelo.
Selecione o modelo que você quer executar no menu suspenso Modelo do Dataflow.
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:
- Modelos Flex: metadados
- Modelos clássicos: usar metadados no código do pipeline
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.
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
- Saiba mais sobre o processamento "Exatamente uma vez".