O Dataflow suporta dois modos para tarefas de streaming:
- Modo exatamente uma vez. Este modo é o predefinido para todos os trabalhos de streaming do Dataflow. Neste modo, o Dataflow garante que os registos não são ignorados nem duplicados à medida que os dados se movem através do pipeline.
- Modo pelo menos uma vez. Este modo garante que os registos são processados, pelo menos, uma vez (ou seja, não são perdidos registos de entrada). No entanto, os registos duplicados são possíveis neste modo. Para exemplos de utilização que podem tolerar duplicados, o modo at-least-once pode reduzir significativamente o custo e a latência da sua tarefa.
Escolha o modo de streaming a usar
Escolha o modo exatamente uma vez se precisar de garantir resultados exatos da pipeline e semântica previsível. Por exemplo:
- Pipelines com agregações, como contagem, soma ou média.
- Exemplos de utilização essenciais para a empresa que dependem do processamento dos registos uma e apenas uma vez. Os exemplos incluem a deteção de fraudes, a deteção de ameaças de rede e os painéis de controlo de inventário de comércio eletrónico.
Escolha o modo de streaming pelo menos uma vez se a sua carga de trabalho puder tolerar registos duplicados e beneficiar de uma redução do custo ou da latência. Por exemplo:
- Cargas de trabalho em que a remoção de duplicados é realizada a jusante do Dataflow. Por exemplo, pipelines que escrevem no BigQuery ou num armazenamento de dados SQL.
- Pipelines apenas de mapeamento sem agregações. Os exemplos incluem o processamento de registos, a captura de dados de alterações ou tarefas de extração, transformação e carregamento (ETL), em que o pipeline só executa transformações por elemento, como a tradução de esquemas.
- Pipelines em que o destino de saída não pode garantir a entrega exatamente uma vez, como o Pub/Sub. Nesse caso, a eliminação de duplicados na pipeline pode ser desnecessária e pode beneficiar do custo e da latência reduzidos do modo de streaming, pelo menos, uma vez.
- Pipelines que leem a partir do Pub/Sub. A leitura a partir do Pub/Sub é significativamente otimizada quando usa o modo "pelo menos uma vez".
Considerações adicionais
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 a transmissão em fluxo "pelo menos uma vez" em cargas realistas para avaliar o impacto.
Quando usa o modo "pelo menos uma vez", a taxa de registos duplicados depende do número de novas tentativas. Normalmente, a taxa de base é baixa (<1%). No entanto, podem ocorrer picos se os nós de trabalho falharem ou se outras condições causarem chamadas RPC repetidas.
O modo de streaming afeta a forma como o Streaming Engine processa os registos, mas não altera a semântica dos conetores de E/S. Recomendamos que alinhe a semântica de E/S com o modo de streaming. Por exemplo, se usar o modo de streaming at-least-once com o conetor BigQuery I/O, defina o modo de escrita como
STORAGE_API_AT_LEAST_ONCE
. Os modelos do Dataflow fornecidos pela Google ativam automaticamente esta opção quando usa o streaming, pelo menos, uma vez.As transformações ao nível do elemento, como
Map
, nem sempre são idempotentes. Por exemplo, considere uma função que recebe uma mensagem e anexa a data/hora atual à mesma. Nesse caso, um registo duplicado pode produzir vários resultados distintos. O modo "Pelo menos uma vez" pode não ser adequado para esse pipeline.
Defina o modo de streaming
O processamento exatamente uma vez é a predefinição para todos os trabalhos do Dataflow. Para ativar o modo de streaming "pelo menos uma vez", defina a
streaming_mode_at_least_once
opção de serviço.
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 não especificar a opção streaming_mode_at_least_once
, o Dataflow usa o modo de streaming exatamente uma vez.
Se definir a opção streaming_mode_at_least_once
, o Dataflow ativa automaticamente o Streaming Engine com a faturação baseada em recursos.
Para atualizar o modo de streaming num trabalho em execução, inicie um trabalho de substituição.
Selecione o modo de streaming para um modelo
Para selecionar o modo de streaming quando executa um modelo de streaming do Dataflow, siga estes passos:
Consola
Na Google Cloud consola, aceda à página Tarefas do Dataflow.
Clique em Criar tarefa a partir de modelo.
Selecione o modelo que quer executar no menu pendente Modelo de fluxo de dados.
Para o Modo de streaming, selecione o modo de streaming. Se o modelo suportar apenas um modo, esta opção é desativada.
gcloud
Para ativar o modo "pelo menos uma vez", defina a opção streaming_mode_at_least_once
no parâmetro additional-experiments
:
--additional-experiments=streaming_mode_at_least_once
Para ativar o modo de execução única, defina a opção streaming_mode_exactly_once
na sinalização additional-experiments
:
--additional-experiments=streaming_mode_exactly_once
Estas duas opções são mutuamente exclusivas. Se não definir uma destas opções, o modelo usa o modo de streaming predefinido, que é determinado pelos metadados do modelo. Para mais informações, consulte o artigo Modelos personalizados.
REST
Use o campo additionalExperiments
no objeto
FlexTemplateRuntimeEnvironment
(modelos flexíveis) ou
RuntimeEnvironment
(modelos clássicos).
{
additionalExperiments : ["streaming_mode_at_least_once"]
...
}
Modelos personalizados
Se criar um modelo personalizado que suporte o processamento pelo menos uma vez, adicione os seguintes campos de nível superior ao ficheiro de metadados do modelo:
{
"streaming": true,
"supportsAtLeastOnce": true,
"supportsExactlyOnce": true,
"defaultStreamingMode": "AT_LEAST_ONCE"
}
Estes campos de metadados permitem que os utilizadores selecionem o modo de streaming quando implementam o modelo na Google Cloud consola. O campo defaultStreamingMode
é opcional e especifica o modo de streaming predefinido para o modelo. Se não especificar defaultStreamingMode
e o modelo suportar ambos os modos, o modo de execução única é o predefinido.
Para mais informações, consulte as seguintes secções na documentação de modelos do Dataflow:
- Modelos flexíveis: metadados
- Modelos clássicos: use metadados no código do pipeline
Veja o modo de streaming de uma tarefa
Para ver o modo de streaming de uma tarefa, aceda à página Tarefas na Google Cloud consola.
O modo de streaming também é apresentado na página de detalhes do trabalho, no painel Informações do trabalho.
Limitações
O modo de streaming "Pelo menos uma vez" requer o Streaming Engine com a faturação baseada em recursos.
Preços
O modo "Pelo menos uma vez" usa sempre a faturação baseada em recursos, em que lhe é faturado o total de recursos consumidos pela sua tarefa.
O custo por unidade das unidades de computação do Streaming Engine é o mesmo, independentemente do modo de streaming. No entanto, na maioria dos casos, um pipeline consome significativamente menos recursos totais quando usa o modo at-least-once.
O que se segue?
- Saiba mais acerca do processamento exatamente uma vez.