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.

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 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, 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:

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.