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.
Benefícios
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, mas nenhum erro aparece nos arquivos de registro externos. 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. É preciso especificar esse parâmetro 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.