Esta página mostra como resolver problemas com as funcionalidades de escala automática do Dataflow e fornece informações sobre como gerir a escala automática.
A tarefa não aumenta nem diminui recursos
Esta secção fornece informações sobre cenários que podem impedir os trabalhadores de aumentar ou diminuir a escala.
O trabalho de streaming não aumenta recursos
Quando o pipeline de streaming tem um atraso, os trabalhadores não são dimensionados.
Este problema ocorre quando o atraso dura menos de alguns minutos ou quando o paralelismo é limitado.
Por vezes, o backlog é elevado, mas o paralelismo é baixo. Nesse caso, o Dataflow não é dimensionado, porque o trabalho não pode ser distribuído por mais trabalhadores, pelo que adicionar mais trabalhadores não ajuda no processamento. Para mais informações, consulte o artigo Dimensionamento automático de streaming.
Os trabalhos em lote e de streaming não são dimensionados
A tarefa de processamento em lote ou streaming é executada conforme esperado, mas quando são necessários mais trabalhadores, a tarefa não é dimensionada.
Este problema pode ocorrer por um dos seguintes motivos:
- Os ficheiros temporários ou de preparação não estão acessíveis. Se o seu trabalho usar um contentor do Cloud Storage, o contentor pode ter uma configuração do ciclo de vida que elimina objetos no contentor. Os objetos eliminados incluem ficheiros e pastas temporárias e de preparação. Para verificar se os ficheiros foram eliminados, verifique a configuração do ciclo de vida do contentor. Se as pastas ou os ficheiros de preparação ou temporários foram eliminados após o início da tarefa, os pacotes necessários para criar novos trabalhadores podem não existir. Para resolver este problema, recrie as pastas e os ficheiros no contentor.
- As regras de firewall impedem que os trabalhadores enviem e recebam tráfego nas portas TCP necessárias. As regras da firewall podem impedir o início dos trabalhadores. Os trabalhadores do Dataflow têm de poder enviar e receber tráfego nas portas TCP 12345 e 12346. Para mais informações, incluindo passos para resolver este problema, consulte o artigo Regras de firewall para o Dataflow.
- Uma origem personalizada tem um método
getProgress()que devolve um valor NULL. Quando usa uma origem personalizada, as métricas de registo pendente baseiam-se no valor de retorno do métodogetProgress()da sua origem personalizada para começar a recolher dados. A implementação predefinida paragetProgress()devolve um valor NULL. Para resolver este problema, certifique-se de que a sua origem personalizada substitui o métodogetProgress()predefinido para devolver um valor não NULO. - Uma atualização acionada pela escala automática vertical desativa temporariamente a escala automática horizontal. Para mais informações, consulte a secção Efeito no ajuste de escala automático horizontal.
- Se estiver a usar uma operação
mapnuma pipeline Python e a sua tarefa não for dimensionada, pode ter de adicionar uma transformaçãoReshuffleao código da pipeline. Para mais informações, consulte o artigo Reshuffle na documentação do Apache Beam.
O trabalho de streaming não reduz recursos
Quando a tarefa de streaming tem um atraso e uma utilização da CPU baixos, os trabalhadores não são reduzidos. Este problema pode ocorrer por vários motivos.
Quando as tarefas não usam o Streaming Engine, o Dataflow equilibra o número de discos persistentes entre os trabalhadores. Como resultado, cada trabalhador tem de ter um número igual de discos persistentes. Por exemplo, se existirem 100 discos e 100 trabalhadores, cada trabalhador tem um disco. Quando a tarefa é reduzida, pode ter 50 trabalhadores com dois discos persistentes por trabalhador. O trabalho não é reduzido novamente até poder ter 25 trabalhadores com quatro discos persistentes por trabalhador. Além disso, o número mínimo de trabalhadores é o valor atribuído a
maxNumWorkersdividido por 15. Para mais informações, consulte o artigo Intervalo de escalabilidade para pipelines de escalabilidade automática de streaming.Quando as tarefas usam o Streaming Engine, o objetivo de redução é baseado numa utilização da CPU alvo de 75%. Quando não é possível alcançar esta utilização da CPU, a redução é desativada.
A estimativa do tempo de atraso tem de permanecer abaixo dos dez segundos durante, pelo menos, dois minutos antes de os trabalhadores serem reduzidos. As flutuações no tempo de pendências podem desativar a redução da escala. Além disso, o baixo débito pode distorcer a estimativa de tempo.
PeriodicImpulseé suportado nas versões 2.60.0 e posteriores do SDK do Apache Beam. Quando o seu pipeline usaPeriodicImpulsecom as versões 2.59.0 e anteriores do SDK do Apache Beam, os trabalhadores do Dataflow não são reduzidos como esperado.
Aumentar o número de paragens
A tarefa de processamento em lote ou de streaming começa a ser dimensionada, mas os trabalhadores param de ser dimensionados, apesar de ainda haver um atraso.
Este problema ocorre quando os limites de quota são atingidos.
- Quotas do Compute Engine: os trabalhos do Dataflow estão sujeitos à quota do Compute Engine do projeto. Se estiverem a ser executados vários trabalhos, o projeto pode ter atingido o limite da respetiva quota do Compute Engine. Nesse caso, o Dataflow não pode aumentar o número de trabalhadores.
- Quotas de CPU: as tarefas do Dataflow também estão sujeitas à quota de CPU do projeto. Se o tipo de trabalhador usar mais do que uma CPU, o projeto pode estar no limite da quota de CPU.
- Quotas de endereços IP externos: quando a sua tarefa usa endereços IP externos para comunicar com recursos, precisa de tantos endereços IP externos quantos trabalhadores. Quando o número de trabalhadores aumenta, o número de endereços IP externos também aumenta. Quando atinge o limite de endereços IP, os trabalhadores deixam de ser aumentados.
Além disso, se a região que escolher estiver fora de um recurso, não pode criar novos recursos desse tipo, mesmo que tenha quota restante na sua região ou projeto. Por exemplo, ainda pode ter quota para criar endereços IP externos no us-central1, mas essa região pode não ter endereços IP disponíveis. Para mais informações, consulte o artigo Quotas e disponibilidade de recursos.
Para resolver este problema, peça um aumento da quota ou execute a tarefa numa região diferente.
A sugestão de utilização do trabalhador não tem efeito
Definiu a sugestão de utilização de trabalhadores , mas o comportamento do dimensionamento automático não se altera.
Para compreender este problema, aceda ao
gráfico de utilização da CPU do trabalhador
e verifique se a sugestão de utilização do trabalhador está a ser usada ativamente. Se a sugestão estiver a ser usada, o gráfico mostra CPU utilization hint (actively used by autoscaler). Caso contrário, é apresentado
CPU utilization hint (not actively used by autoscaler).
A sugestão de utilização é apenas um fator que afeta o dimensionamento automático. A tabela seguinte apresenta alguns motivos pelos quais o escalador automático pode não usar ativamente a sugestão:
| Comportamento de escalabilidade observado | Causas | Métricas a verificar |
|---|---|---|
| Sem alteração |
|
|
| Aumente a escala |
|
|
| Diminuir escala |
|
Para mais informações, consulte o artigo Heurísticas de escalabilidade automática de streaming.
Lacunas nas métricas de escala automática
Existem lacunas curtas e temporárias nas métricas de escalamento automático.
Este problema pode ocorrer se as tarefas de back-end forem reiniciadas. Estas lacunas nas métricas não indicam um problema com o dimensionamento automático nem com o estado do seu trabalho de streaming.
A CPU está distribuída de forma desigual
Quando a tarefa é dimensionada automaticamente, a utilização da CPU é distribuída de forma desigual entre os trabalhadores. Alguns trabalhadores têm uma utilização da CPU, uma latência do sistema ou uma atualização dos dados mais elevadas do que outros.
Este problema pode ocorrer se os seus dados contiverem uma tecla de atalho. Uma tecla de atalho é uma tecla com elementos suficientes para afetar negativamente o desempenho do pipeline. Cada chave tem de ser processada por um único trabalhador, pelo que o trabalho não pode ser dividido entre trabalhadores.
Para mais informações, consulte as orientações sobre erros de teclas de atalho.
O item de trabalho que pede a leitura do estado já não é válido no back-end
Durante a comunicação entre instâncias de VMs de trabalho e tarefas do Streaming Engine num pipeline de streaming, ocorre o seguinte erro:
The work item requesting state read is no longer valid on the backend.
The work has already completed or will be retried.
This is expected during autoscaling events.
Durante o dimensionamento automático, as instâncias de VM de trabalho comunicam com várias tarefas do Streaming Engine, e cada tarefa serve várias instâncias de VM de trabalho. As chaves de itens são usadas para distribuir o trabalho. Cada tarefa e instância de VM de trabalhador têm uma coleção de intervalos de chaves, e a distribuição destes intervalos pode mudar dinamicamente. Por exemplo, durante o dimensionamento automático, o redimensionamento de tarefas pode fazer com que a distribuição do intervalo de chaves mude. Este erro pode ocorrer quando um intervalo de chaves é alterado. O erro é esperado e, a menos que veja uma correlação entre estas mensagens e um pipeline com um desempenho inferior, pode ignorá-lo.
Recursos do motor de streaming insuficientes
Se o Streaming Engine não conseguir atribuir o número mínimo de trabalhadores que pediu, é devolvido o seguinte erro:
Streaming Engine does not currently have enough resources available to fulfill
the request.
Para resolver este problema, experimente definir um número mínimo de trabalhadores mais pequeno. Consulte o artigo Defina o intervalo de dimensionamento automático.
Intervalo de escalabilidade para pipelines de escala automática de streaming
Esta secção fornece detalhes sobre o intervalo de escalabilidade para pipelines de dimensionamento automático de streaming.
Java
Para tarefas de escala automática de streaming que não usam o Streaming Engine, o serviço Dataflow atribui entre 1 e 15 discos persistentes a cada worker. Esta atribuição significa que o número mínimo de trabalhadores usados para um pipeline de escalamento automático de streaming é N/15, em que N é o valor de --maxNumWorkers.
Para tarefas de escala automática de streaming que usam o Streaming Engine, o número mínimo de trabalhadores é 1.
O Dataflow equilibra o número de discos persistentes entre os trabalhadores. Por exemplo, se o seu pipeline precisar de três ou quatro trabalhadores em estado estável, pode definir --maxNumWorkers=15. O pipeline é dimensionado automaticamente
entre 1 e 15 trabalhadores, usando 1, 3, 5 ou 15 trabalhadores, que
correspondem a 15, 5, 3 ou 1 discos persistentes por trabalhador, respetivamente.
--maxNumWorkers pode ter, no máximo, 1000.
Python
Para tarefas de escala automática de streaming que não usam o Streaming Engine, o serviço Dataflow atribui entre 1 e 15 discos persistentes a cada worker. Esta atribuição significa que o número mínimo de trabalhadores usados para um pipeline de escalamento automático de streaming é N/15, em que N é o valor de --max_num_workers.
Para tarefas de escala automática de streaming que usam o Streaming Engine, o número mínimo de trabalhadores é 1.
O Dataflow equilibra o número de discos persistentes entre os trabalhadores. Por exemplo, se o seu pipeline precisar de três ou quatro trabalhadores em estado estável, pode definir --max_num_workers=15. O pipeline é dimensionado automaticamente
entre 1 e 15 trabalhadores, usando 1, 2, 3, 4, 5, 8 ou 15 trabalhadores, que
correspondem a 15, 8, 5, 4, 3, 2 ou 1 discos persistentes por trabalhador,
respetivamente.
--max_num_workers pode ter, no máximo, 1000.
Ir
Para tarefas de escala automática de streaming que não usam o Streaming Engine, o serviço Dataflow atribui entre 1 e 15 discos persistentes a cada worker. Esta atribuição significa que o número mínimo de trabalhadores usados para um pipeline de escalamento automático de streaming é N/15, em que N é o valor de --max_num_workers.
Para tarefas de escala automática de streaming que usam o Streaming Engine, o número mínimo de trabalhadores é 1.
O Dataflow equilibra o número de discos persistentes entre os trabalhadores. Por exemplo, se o seu pipeline precisar de três ou quatro trabalhadores em estado estável, pode definir --max_num_workers=15. O pipeline é dimensionado automaticamente
entre 1 e 15 trabalhadores, usando 1, 2, 3, 4, 5, 8 ou 15 trabalhadores, que
correspondem a 15, 8, 5, 4, 3, 2 ou 1 discos persistentes por trabalhador,
respetivamente.
--max_num_workers pode ter, no máximo, 1000.
Número máximo de trabalhadores que o escalamento automático de streaming pode usar
Java
O Dataflow opera dentro dos limites da quota de número de instâncias do Compute Engine do seu projeto ou maxNumWorkers, consoante o que for inferior.
Python
O Dataflow opera dentro dos limites da quota de número de instâncias do Compute Engine do seu projeto ou max_num_workers, consoante o que for inferior.
Ir
O Dataflow opera dentro dos limites da quota de número de instâncias do Compute Engine do seu projeto ou max_num_workers, consoante o que for inferior.
Limite o ajuste de escala automático para reduzir o impacto na faturação
Se não quiser que a escalabilidade automática aumente a sua fatura, pode limitar o número máximo de trabalhadores que a sua tarefa de streaming pode usar.
Java
Ao especificar --maxNumWorkers, limita o intervalo de escalabilidade usado para processar
o seu trabalho.
Python
Ao especificar --max_num_workers, limita o intervalo de escalabilidade usado para processar
o seu trabalho.
Ir
Ao especificar --max_num_workers, limita o intervalo de escalabilidade usado para processar
o seu trabalho.
Altere o intervalo de dimensionamento
Para obter informações sobre como alterar o intervalo de escalabilidade numa pipeline de streaming, consulte o artigo Defina o intervalo de escalabilidade automática.
Desative o ajuste de escala automático em pipelines de streaming
Para desativar o ajuste de escala automático no pipeline de streaming, siga estes passos.
Java
Defina --autoscalingAlgorithm=NONE. Para mais informações, consulte o artigo
Desative o ajuste de escala automático horizontal.
Python
Defina --autoscaling_algorithm=NONE. Para mais informações, consulte o artigo
Desative o ajuste de escala automático horizontal.
Ir
Defina --autoscaling_algorithm=NONE. Para mais informações, consulte o artigo
Desative o ajuste de escala automático horizontal.
Use um número fixo de trabalhadores
Para tarefas de streaming que não usam o Streaming Engine, o comportamento predefinido é usar um número fixo de trabalhadores. Para usar o dimensionamento automático de streaming com estes pipelines, tem de o ativar explicitamente, uma vez que não está ativado por predefinição.