O Streaming Engine do Dataflow move a execução do pipeline para fora das máquinas virtuais (VMs) do trabalhador e para o backend do serviço Dataflow. Quando não usa o Streaming Engine para tarefas de streaming, o executor do Dataflow executa os passos do pipeline de streaming totalmente em VMs de trabalho, consumindo CPU, memória e armazenamento em disco persistente do trabalhador.
O Streaming Engine está ativado por predefinição para os seguintes pipelines:
- Pipelines de streaming que usam a versão 2.21.0 ou posterior do SDK do Apache Beam Python e o Python 3.
- Pipelines de streaming que usam a versão 2.33.0 ou posterior do SDK Go do Apache Beam.
Para saber mais sobre a implementação do Streaming Engine, consulte o artigo Streaming Engine: Execution Model for Highly-Scalable, Low-Latency Data Processing (Streaming Engine: modelo de execução para processamento de dados de baixa latência e altamente escalável).
Vantagens
O modelo de motor de streaming tem as seguintes vantagens:
- Redução da utilização de recursos de CPU, memória e armazenamento do Persistent Disk nas VMs de trabalho. O Streaming Engine funciona melhor com tipos de máquinas de trabalho mais pequenos (
n1-standard-2
em vez den1-standard-4
). Não requer Persistent Disk além de um pequeno disco de arranque do trabalhador, o que leva a um menor consumo de recursos e de quota. - Escalamento automático horizontal mais reativo em resposta a variações no volume de dados recebidos. O Streaming Engine oferece uma escalabilidade mais suave e detalhada dos trabalhadores.
- Melhor capacidade de suporte, porque não precisa de voltar a implementar os seus pipelines para aplicar atualizações de serviços.
A maior parte da redução dos recursos de trabalho resulta da transferência do trabalho para o serviço Dataflow. Por esse motivo, existe um custo associado à utilização do Streaming Engine.
Apoio técnico e limitações
- Para o SDK Java, o Streaming Engine requer a versão 2.10.0 ou posterior do SDK do Apache Beam.
- Para o SDK Python, o Streaming Engine requer a versão 2.16.0 ou posterior do SDK Apache Beam.
- Para o Go SDK, o Streaming Engine requer a versão 2.33.0 ou posterior do Apache Beam SDK.
- Não pode atualizar pipelines que já estejam em execução para usar o Streaming Engine. Se o seu pipeline estiver em produção sem o Streaming Engine e quiser usar o Streaming Engine, pare o pipeline usando a opção Drain do Dataflow. Em seguida, especifique o parâmetro Streaming Engine e volte a executar o pipeline.
- Para trabalhos 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 em buffer e estado personalizado. Quando um pipeline excede este limite, fica bloqueado com um elevado atraso do sistema, e é apresentada uma mensagem no registo de tarefas a indicar que o limite foi excedido. Como prática recomendada, evite designs de pipelines que resultem em chaves grandes. Para mais informações, consulte o artigo Escrever pipelines do Dataflow tendo em conta a escalabilidade.
- Suporta chaves de encriptação geridas pelo cliente (CMEK)
Use o Streaming Engine
Esta funcionalidade está disponível em todas as regiões onde o Dataflow é suportado. Para ver as localizações disponíveis, leia o artigo Localizações do Dataflow.
Java
O Streaming Engine requer a versão 2.10.0 ou posterior do SDK Java do Apache Beam.
Para usar o Streaming Engine para os seus pipelines de streaming, especifique o seguinte parâmetro:
--enableStreamingEngine
se estiver a usar o SDK do Apache Beam para Java versões 2.11.0 ou posteriores.--experiments=enable_streaming_engine
se estiver a usar a versão 2.10.0 do SDK do Apache Beam para Java.
Se usar o Streaming Engine do Dataflow para o seu pipeline, não especifique o parâmetro --zone
. Em alternativa, especifique o parâmetro --region
e defina o valor para uma região suportada.
O Dataflow seleciona automaticamente a zona na região que especificou. Se especificar o parâmetro --zone
e o definir para uma zona fora das regiões disponíveis, o Dataflow comunica um erro.
O Streaming Engine funciona melhor com tipos de máquinas de trabalhador principais mais pequenos. Use o tipo de tarefa para determinar se deve usar um tipo de máquina de trabalhador com muita memória.
Alguns exemplos de tipos de máquinas que recomendamos incluem --workerMachineType=n1-standard-2
e --workerMachineType=n1-highmem-2
. Também pode definir --diskSizeGb=30
porque o Streaming Engine só precisa de espaço para a imagem de arranque do trabalhador e os registos
locais. Estes valores são os valores predefinidos.
Python
O Streaming Engine requer a versão 2.16.0 ou posterior do SDK do Apache Beam Python.
O Streaming Engine está ativado por predefinição para novos pipelines de streaming do Dataflow quando as seguintes condições são cumpridas:
- Os pipelines usam a versão 2.21.0 ou posterior do SDK do Apache Beam Python e o Python 3.
- As chaves de encriptação geridas pelo cliente não são usadas.
- Os trabalhadores do Dataflow estão na mesma região que a sua tarefa do Dataflow.
Na versão 2.45.0 ou posterior do SDK Python, não pode desativar o Streaming Engine para pipelines de streaming. Na versão 2.44.0 ou anterior do SDK do Python, para desativar o Streaming Engine, especifique o seguinte parâmetro:
--experiments=disable_streaming_engine
Se usar o Python 2, para ativar o Streaming Engine, especifique o seguinte parâmetro:
--enable_streaming_engine
Se usar o Streaming Engine do Dataflow no seu pipeline, não
especifique o parâmetro --zone
. Em alternativa, especifique o parâmetro --region
e defina o valor para uma região suportada.
O Dataflow seleciona automaticamente a zona na região que especificou. Se especificar o parâmetro --zone
e o definir para uma zona fora das regiões disponíveis, o Dataflow comunica um erro.
O Streaming Engine funciona melhor com tipos de máquinas de trabalhador principais mais pequenos. Use o tipo de tarefa para determinar se deve usar um tipo de máquina de trabalhador com muita memória.
Alguns exemplos de tipos de máquinas que recomendamos incluem --workerMachineType=n1-standard-2
e --workerMachineType=n1-highmem-2
. Também pode definir --disk_size_gb=30
porque o Streaming Engine só precisa de espaço para a imagem de arranque do trabalhador e os registos
locais. Estes valores são os valores predefinidos.
Go
O Streaming Engine requer a versão 2.33.0 ou posterior do SDK Go do Apache Beam.
O Streaming Engine está ativado por predefinição para novos pipelines de streaming do Dataflow que usam o SDK Go do Apache Beam.
Se quiser desativar o Streaming Engine no pipeline de streaming Go, especifique o seguinte parâmetro. Este parâmetro tem de ser especificado sempre que quiser desativar o Streaming Engine.
--experiments=disable_streaming_engine
Se usar o Streaming Engine do Dataflow no seu pipeline, não
especifique o parâmetro --zone
. Em alternativa, especifique o parâmetro --region
e defina o valor para uma região suportada.
O Dataflow seleciona automaticamente a zona na região que especificou. Se especificar o parâmetro --zone
e o definir para uma zona fora das regiões disponíveis, o Dataflow comunica um erro.
O Streaming Engine funciona melhor com tipos de máquinas de trabalhador principais mais pequenos. Use o tipo de tarefa para determinar se deve usar um tipo de máquina de trabalhador com muita memória.
Alguns exemplos de tipos de máquinas que recomendamos incluem --workerMachineType=n1-standard-2
e --workerMachineType=n1-highmem-2
. Também pode definir --disk_size_gb=30
porque o Streaming Engine só precisa de espaço para a imagem de arranque do trabalhador e os registos
locais. Estes valores são os valores predefinidos.
CLI gcloud
Quando executa o pipeline através do comando
gcloud dataflow jobs run
ou do comando
gcloud dataflow flex-template run
para ativar o Streaming Engine, use o seguinte sinalizador:
--enable-streaming-engine
Para desativar o motor de streaming, use a seguinte flag:
--additional-experiments=disable_streaming_engine
REST
Quando executa o pipeline através do método projects.locations.jobs.create
na API REST, use o recurso Job
para ativar ou desativar o Streaming Engine. Para ativar o motor de streaming,
em environment
, defina o campo experiments
como enable_streaming_engine
:
"environment": {
"experiments": "enable_streaming_engine"
}
Para desativar o motor de streaming,
em environment
, defina o campo experiments
como disable_streaming_engine
:
"environment": {
"experiments": "disable_streaming_engine"
}
Preços
O Streaming Engine do Dataflow oferece um modelo de faturação baseado em recursos, no qual lhe é faturado o total de recursos consumidos pela sua tarefa. Com a faturação baseada em recursos, os recursos do Streaming Engine consumidos pela sua tarefa são medidos e contabilizados em unidades de computação do Streaming Engine. A faturação é feita com base na CPU do trabalhador, na memória do trabalhador e nas unidades de computação do Streaming Engine.
Use a faturação baseada em recursos
Para usar a faturação baseada em recursos, quando iniciar ou atualizar a tarefa, inclua a seguinte opção do serviço 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
Faturação de dados processados (antiga)
A menos que ative a faturação baseada em recursos, os seus trabalhos são faturados através da faturação de dados processados antiga.
Valide o modelo de faturação
A menos que esteja a usar o Dataflow Prime, quando tem tarefas que usam a faturação baseada em recursos, a fatura inclui o SKU Streaming Engine Compute Unit
. Quando tem tarefas que usam a faturação de dados processados, a fatura inclui o SKU Streaming Engine data processed
.
Se tiver alguns trabalhos que usam a faturação baseada em recursos e outros trabalhos que usam a faturação de dados processados, a fatura inclui ambas as SKUs.
Quando usa o Dataflow Prime com faturação baseada em recursos, é usado o SKU da unidade de computação de dados (DCU).
Para ver que modelo de preços a sua tarefa usa, na interface de monitorização do Dataflow, selecione a sua tarefa. Se o seu trabalho usar a faturação baseada em recursos, o painel lateral Informações do trabalho inclui um campo Unidades de cálculo do Streaming Engine.
Se tiver dúvidas sobre a faturação, contacte o apoio ao cliente do Google Cloud.