O Streaming Engine do Dataflow muda a execução do pipeline das máquinas virtuais (VMs) de worker para o back-end do serviço Dataflow. Quando você não usa o Streaming Engine para jobs de streaming, o executor do Dataflow executa as etapas do pipeline de streaming inteiramente em VMs de worker, consumindo a CPU, a memória e o armazenamento em disco permanente do worker.
O Streaming Engine é ativado por padrão nos seguintes pipelines:
- Pipelines de streaming que usam o SDK do Apache Beam para Python versão 2.21.0 ou posterior e o Python 3.
- Pipelines de streaming que usam a versão 2.33.0 ou mais recente do SDK do Apache Beam para Go.
Saiba mais mais sobre a implementação do Streaming Engine em Streaming Engine: modelo de execução para processamento de dados altamente escalonável e de baixa latência.
Vantagens
O modelo do Streaming Engine tem os seguintes benefícios:
- Uso reduzido de recursos de armazenamento de CPU, memória e disco permanente nas VMs de worker. O Streaming Engine funciona melhor com tipos de máquinas de worker menores (
n1-standard-2
em vez den1-standard-4
). Ele não requer o disco permanente além de um disco de inicialização de worker pequeno, levando a menos consumo de recursos e cotas. - Escalonamento automático com mais resposta a variações no volume de dados recebidos. O Streaming Engine oferece um escalonamento mais suave e granular dos workers.
- Melhor suporte, já que você não precisa reimplantar seus pipelines para aplicar atualizações de serviço.
A maior parte da redução nos recursos do worker é resultado da transferência do trabalho para o serviço Dataflow. Por isso, o uso do Streaming Engine gera uma cobrança.
Suporte e limitações
- Para o SDK para Java, o Streaming Engine requer a versão 2.10.0 ou posterior do SDK do Apache Beam.
- Para o SDK do Python, o Streaming Engine requer a versão 2.16.0 ou posterior do SDK do Apache Beam.
- Para o SDK do Go, o Streaming Engine requer a versão 2.33.0 ou posterior do SDK do Apache Beam.
- Não é possível atualizar pipelines em execução para usar o Streaming Engine. Se o pipeline estiver em execução sem produção no Streaming Engine e você quiser usá-lo, interrompa o pipeline usando a opção Drenar do Dataflow. Em seguida, especifique o parâmetro do Streaming Engine e execute novamente o pipeline.
- Para jobs que usam o Streaming Engine, os dados de entrada agregados para as janelas abertas têm um limite de 60 GB por chave. Os dados de entrada agregados incluem elementos armazenados em buffer e estado personalizado. Quando um pipeline excede esse limite, ele fica travado com um atraso elevado no sistema, e uma mensagem no registro de trabalho indica que o limite foi excedido. Como prática recomendada, evite projetos de pipeline que resultem em chaves grandes. Para mais informações, consulte Como escrever canais do Dataflow com escalonabilidade em mente.
- Compatível com chaves de criptografia gerenciadas pelo cliente (CMEK)
Usar o Streaming Engine
Esse recurso está disponível em todas as regiões em que o Dataflow é compatível. Para ver os territórios disponíveis, consulte Locais do Dataflow.
Java
O Streaming Engine requer a versão 2.10.0 ou posterior do SDK do Apache Beam para Java.
Para usar o Streaming Engine em pipelines de streaming, especifique o seguinte parâmetro:
--enableStreamingEngine
, se você estiver usando a versão 2.11.0 ou mais recente do SDK do Apache Beam para Java.--experiments=enable_streaming_engine
, se você estiver usando a versão 2.10.0 do SDK do Apache Beam para Java.
Se você usar o Dataflow Streaming Engine no pipeline, não especifique o parâmetro --zone
. Em vez disso, especifique o parâmetro --region
e defina o valor como uma região aceita.
O Dataflow vai selecionar automaticamente a zona na região
especificada. Se você especificar o parâmetro --zone
e defini-lo como uma zona
fora das regiões disponíveis, o Dataflow vai informar um erro.
O Streaming Engine funciona melhor com tipos de máquinas de núcleo do worker menores. Use o
tipo de job para determinar se é preciso usar um tipo de máquina de worker de alta memória.
Entre os exemplos de tipos de máquinas que recomendamos
estão --workerMachineType=n1-standard-2
e --workerMachineType=n1-highmem-2
. Também é possível definir --diskSizeGb=30
porque o Streaming Engine precisa de espaço apenas para a imagem de inicialização do worker e os registros
locais. Esses valores são padrão.
Python
O Streaming Engine requer a versão 2.16.0 ou posterior do SDK do Apache Beam para Python.
O Streaming Engine é ativado por padrão para novos pipelines de streaming do Dataflow quando as seguintes condições são atendidas:
- Os pipelines usam o SDK do Apache Beam para Python versão 2.21.0 ou posterior e o Python 3.
- Chaves de criptografia gerenciadas pelo cliente não são usadas.
- Os workers do Dataflow estão na mesma região que o job do Dataflow.
No SDK do Python versão 2.45.0 ou posterior, não é possível desativar o Streaming Engine para pipelines de streaming. No SDK do Python versão 2.44.0 ou anterior, para desativar o Streaming Engine, especifique o parâmetro a seguir:
--experiments=disable_streaming_engine
Se você usa o Python 2, especifique o parâmetro a seguir para ativar o Streaming Engine:
--enable_streaming_engine
Se você usar o Dataflow Streaming Engine no pipeline, não especifique o parâmetro --zone
. Em vez disso, especifique o parâmetro --region
e defina o valor como uma região aceita.
O Dataflow vai selecionar automaticamente a zona na região
especificada. Se você especificar o parâmetro --zone
e defini-lo como uma zona
fora das regiões disponíveis, o Dataflow vai informar um erro.
O Streaming Engine funciona melhor com tipos de máquinas de núcleo do worker menores. Use o
tipo de job para determinar se é preciso usar um tipo de máquina de worker de alta memória.
Entre os exemplos de tipos de máquinas que recomendamos
estão --workerMachineType=n1-standard-2
e --workerMachineType=n1-highmem-2
. Também é possível definir --disk_size_gb=30
porque o Streaming Engine precisa de espaço apenas para a imagem de inicialização do worker e os registros
locais. Esses valores são padrão.
Go
O Streaming Engine requer a versão 2.33.0 ou posterior do SDK do Apache Beam para Go.
O Streaming Engine é ativado por padrão para novos pipelines de streaming do Dataflow que usam o SDK do Apache Beam para Go.
Se você quiser desativar o Streaming Engine no pipeline de streaming do Go, especifique o parâmetro a seguir. Esse parâmetro precisa ser especificado sempre que você quiser desativar o Streaming Engine.
--experiments=disable_streaming_engine
Se você usar o Dataflow Streaming Engine no pipeline, não especifique o parâmetro --zone
. Em vez disso, especifique o parâmetro --region
e defina o valor como uma região aceita.
O Dataflow vai selecionar automaticamente a zona na região
especificada. Se você especificar o parâmetro --zone
e defini-lo como uma zona
fora das regiões disponíveis, o Dataflow vai informar um erro.
O Streaming Engine funciona melhor com tipos de máquinas de núcleo do worker menores. Use o
tipo de job para determinar se é preciso usar um tipo de máquina de worker de alta memória.
Entre os exemplos de tipos de máquinas que recomendamos
estão --workerMachineType=n1-standard-2
e --workerMachineType=n1-highmem-2
. Também é possível definir --disk_size_gb=30
porque o Streaming Engine precisa de espaço apenas para a imagem de inicialização do worker e os registros
locais. Esses valores são padrão.
CLI da gcloud
Ao executar o pipeline usando o comando
gcloud dataflow jobs run
ou gcloud dataflow flex-template run
para ativar o streaming,
use a seguinte sinalização:
--enable-streaming-engine
Para desativar o mecanismo de streaming, use a seguinte sinalização:
--additional-experiments=disable_streaming_engine
REST
Ao executar o pipeline usando o método
projects.locations.jobs.create
na API REST, use o
recurso Job
para ativar
ou desativar o Streaming Engine. Para ativar o Streaming Engine,
em environment
, defina o campo experiments
como enable_streaming_engine
:
"environment": {
"experiments": "enable_streaming_engine"
}
Para desativar o Streaming Engine,
em environment
, defina o campo experiments
como disable_streaming_engine
:
"environment": {
"experiments": "disable_streaming_engine"
}
Preços
O Dataflow Streaming Engine oferece um modelo de faturamento baseado em recursos em que a cobrança é feita conforme o total de recursos consumidos pelo job. Com o faturamento baseado em recursos, os recursos do Streaming Engine consumidos pelo job são medidos em Unidades de computação do Streaming Engine. Você receberá cobranças pela CPU e pela memória do worker e pelas unidades de computação do Streaming Engine.
Usar o faturamento baseado em recursos
Para usar o faturamento baseado em recursos, ao iniciar ou atualizar o job, inclua a seguinte opção de serviço do Dataflow.
Java
--dataflowServiceOptions=enable_streaming_engine_resource_based_billing
Python
--dataflow_service_options=enable_streaming_engine_resource_based_billing
Go
--dataflow_service_options=enable_streaming_engine_resource_based_billing
Faturamento de dados processados (legado)
A menos que você ative o faturamento baseado em recursos, os jobs serão cobrados pelo faturamento de dados processados legado.
Verificar o modelo de faturamento
A menos que você esteja usando o Dataflow Prime, quando há jobs que usam faturamento baseado em recursos, a cobrança inclui a SKU Streaming Engine Compute Unit
. Quando há jobs que usam o faturamento de dados processados, a cobrança inclui a SKU Streaming Engine data processed
.
Quando há alguns jobs que usam faturamento baseado em recursos e outros que usam faturamento de dados processados, a cobrança inclui as duas SKUs.
Quando você usa o Dataflow Prime com faturamento baseado em recursos, é usada a SKU da Unidade de computação de dados (DCU).
Para ver qual modelo de preços o job usa, selecione o job na interface de monitoramento do Dataflow. Se o job usar faturamento baseado em recursos, o painel lateral Informações do job incluirá o campo Unidades de computação do Streaming Engine.
Se você tiver dúvidas sobre seu faturamento, entre em contato com o Cloud Customer Care.