Usar o Streaming Engine para jobs de streaming

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 de n1-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:

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.