Questa pagina mostra come risolvere i problemi relativi alle funzionalità di scalabilità automatica di Dataflow e fornisce informazioni su come gestire la scalabilità automatica.
Lo scale up o lo scale down del job non viene eseguito
Questa sezione fornisce informazioni sugli scenari che potrebbero impedire ai worker di aumentare o diminuire le risorse.
Lo scale up del job di streaming non funziona
Quando la pipeline di streaming ha un backlog, i worker non vengono scalati.
Questo problema si verifica quando il backlog dura meno di qualche minuto o quando il parallelismo è limitato.
A volte, il backlog è elevato, ma il parallelismo è basso. In questo caso, Dataflow non esegue lo scale up perché il lavoro non può essere distribuito tra più worker, quindi l'aggiunta di altri worker non aiuta l'elaborazione. Per saperne di più, consulta Scalabilità automatica dello streaming.
I job batch e di streaming non vengono scalati
Il job batch o di streaming viene eseguito come previsto, ma quando sono necessari più worker, il job non viene scalato.
Questo problema potrebbe verificarsi per uno dei seguenti motivi:
- I file temporanei o di gestione temporanea non sono accessibili. Se il job utilizza un bucket Cloud Storage, il bucket potrebbe avere una configurazione del ciclo di vita che elimina gli oggetti nel bucket. Gli oggetti eliminati includono file e cartelle temporanee e di staging. Per verificare se i file sono stati eliminati, controlla la configurazione del ciclo di vita del bucket. Se le cartelle o i file temporanei o di gestione temporanea sono stati eliminati dopo l'avvio del job, i pacchetti necessari per creare nuovi worker potrebbero non esistere. Per risolvere il problema, ricrea le cartelle e i file nel bucket.
- Le regole firewall impediscono ai worker di inviare e ricevere traffico sulle porte TCP necessarie. Le regole firewall potrebbero impedire l'avvio dei worker. I worker Dataflow devono essere in grado di inviare e ricevere traffico sulle porte TCP 12345 e 12346. Per saperne di più, inclusi i passaggi per risolvere il problema, consulta Regole firewall per Dataflow.
- Un'origine personalizzata ha un metodo
getProgress()che restituisce un valore NULL. Quando utilizzi un'origine personalizzata, le metriche del backlog si basano sul valore restituito del metodogetProgress()dell'origine personalizzata per iniziare a raccogliere i dati. L'implementazione predefinita pergetProgress()restituisce un valore NULL. Per risolvere il problema, assicurati che l'origine personalizzata sostituisca il metodogetProgress()predefinito per restituire un valore diverso da NULL. - Un aggiornamento attivato dalla scalabilità automatica verticale disattiva temporaneamente la scalabilità automatica orizzontale. Per saperne di più, consulta Effetto sulla scalabilità automatica orizzontale.
- Se utilizzi un'operazione
mapin una pipeline Python e il tuo job non viene scalato, potresti dover aggiungere una trasformazioneReshuffleal codice della pipeline. Per saperne di più, consulta Reshuffle nella documentazione di Apache Beam.
Fare lo scale down del job di streaming non funziona
Quando il job di streaming ha un backlog basso e un utilizzo di CPU ridotto, i worker non vengono fare lo scale down basso. Questo problema può verificarsi per vari motivi.
Quando i job non utilizzano Streaming Engine, Dataflow bilancia il numero di dischi permanenti tra i worker. Di conseguenza, ogni worker deve avere lo stesso numero di dischi permanenti. Ad esempio, se ci sono 100 dischi e 100 worker, ogni worker ha un disco. Quando il job viene ridimensionato, può avere 50 worker con due dischi permanenti per worker. Il job non viene fare lo scale down di nuovo finché non può avere 25 worker con quattro dischi permanenti per worker. Inoltre, il numero minimo di worker è il valore assegnato a
maxNumWorkersdiviso per 15. Per saperne di più, consulta Intervallo di scalabilità per le pipeline di scalabilità automatica di streaming.Quando i job utilizzano Streaming Engine, il target di riduzione della scalabilità è basato su un utilizzo della CPU target del 75%. Quando questo utilizzo della CPU non può essere raggiunto, lo scale down viene disattivato.
La stima del tempo di backlog deve rimanere inferiore a 10 secondi per almeno due minuti prima che i worker vengano fare lo scale down. Le fluttuazioni del tempo di backlog potrebbero disattivare lo scale down. Inoltre, una velocità effettiva bassa può distorcere la stima del tempo.
PeriodicImpulseè supportato nelle versioni 2.60.0 e successive dell'SDK Apache Beam. Quando la pipeline utilizzaPeriodicImpulsecon le versioni 2.59.0 e precedenti dell'SDK Apache Beam, gli worker Dataflow non fare lo scale down come previsto.
Aumentare le fermate
Il job batch o di streaming inizia a scalare, ma i worker smettono di scalare anche se rimane un backlog.
Questo problema si verifica quando vengono raggiunti i limiti di quota.
- Quote di Compute Engine:i job Dataflow sono soggetti alla quota di Compute Engine del progetto. Se sono in esecuzione più job, il progetto potrebbe aver raggiunto il limite della quota di Compute Engine. In questo caso, Dataflow non può aumentare il numero di worker.
- Quote CPU:i job Dataflow sono soggetti anche alla quota CPU del progetto. Se il tipo di worker utilizza più di una CPU, il progetto potrebbe aver raggiunto il limite della quota CPU.
- Quote di indirizzi IP esterni: quando il job utilizza indirizzi IP esterni per comunicare con le risorse, hai bisogno di tanti indirizzi IP esterni quanti sono i worker. Quando il numero di worker aumenta, aumenta anche il numero di indirizzi IP esterni. Quando raggiungi il limite di indirizzi IP, i worker smettono di scalare.
Inoltre, se la risorsa desiderata è esaurita nell'area geografica che hai scelto, non potrai creare nuove risorse di quel tipo, anche se hai ancora a disposizione parte della quota nell'area geografica o nel progetto. Ad esempio, potresti disporre di una quota sufficiente per creare indirizzi IP esterni in us-central1, ma questa regione potrebbe non avere indirizzi IP disponibili. Per saperne di più, consulta Quote e disponibilità delle risorse.
Per risolvere il problema, richiedi un aumento della quota o esegui il job in un'altra regione.
Il suggerimento sull'utilizzo dei lavoratori non ha alcun effetto
Hai impostato il suggerimento per l'utilizzo dei worker, ma il comportamento di scalabilità automatica non cambia.
Per comprendere questo problema, vai al
grafico Utilizzo CPU worker
e controlla se il suggerimento sull'utilizzo dei worker viene utilizzato attivamente. Se il suggerimento
viene utilizzato, il grafico mostra
CPU utilization hint (actively used by autoscaler). In caso contrario, viene visualizzato
CPU utilization hint (not actively used by autoscaler).
Il suggerimento per l'utilizzo è solo uno dei fattori che influiscono sulla scalabilità automatica. La seguente tabella elenca alcuni motivi per cui il gestore della scalabilità automatica potrebbe non utilizzare attivamente il suggerimento:
| Comportamento di scalabilità osservato | Cause | Metriche da controllare |
|---|---|---|
| Nessuna modifica |
|
|
| Scale up |
|
|
| Scalabilità verso il basso |
|
Per saperne di più, consulta Euristiche di scalabilità automatica dello streaming.
Lacune nelle metriche di scalabilità automatica
Esistono brevi interruzioni temporanee nelle metriche di scalabilità automatica.
Questo problema può verificarsi se le attività di backend vengono riavviate. Queste lacune nelle metriche non indicano un problema con la scalabilità automatica o l'integrità del job di streaming.
La CPU è distribuita in modo non uniforme
Quando il job esegue la scalabilità automatica, l'utilizzo della CPU è distribuito in modo non uniforme tra i worker. Alcuni worker hanno un utilizzo della CPU, una latenza di sistema o una freschezza dei dati superiori rispetto ad altri.
Questo problema può verificarsi se i dati contengono un tasto di scelta rapida. Una chiave utilizzata di frequente è una chiave con elementi sufficienti a influire negativamente sulle prestazioni della pipeline. Ogni chiave deve essere elaborata da un singolo worker, quindi il lavoro non può essere suddiviso tra i worker.
Per saperne di più, consulta la guida agli errori dei tasti di scelta rapida.
L'elemento di lavoro che richiede la lettura dello stato non è più valido nel backend
Durante la comunicazione tra le istanze VM worker e le attività di Streaming Engine in una pipeline di streaming, si verifica il seguente errore:
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 la scalabilità automatica, le istanze VM worker comunicano con più attività Streaming Engine e ogni attività gestisce più istanze VM worker. Le chiavi degli elementi vengono utilizzate per distribuire il lavoro. Ogni attività e istanza VM worker ha una raccolta di intervalli di chiavi e la distribuzione di questi intervalli può cambiare dinamicamente. Ad esempio, durante la scalabilità automatica, il ridimensionamento del job può causare la modifica della distribuzione dell'intervallo di chiavi. Questo errore può verificarsi quando un intervallo di chiavi cambia. L'errore è previsto e, a meno che non noti una correlazione tra questi messaggi e una pipeline con un rendimento inferiore, puoi ignorarlo.
Risorse Streaming Engine insufficienti
Se Streaming Engine non riesce ad allocare il numero minimo di worker richiesto, viene restituito il seguente errore:
Streaming Engine does not currently have enough resources available to fulfill
the request.
Per risolvere il problema, prova a impostare un numero minimo di worker inferiore. Vedi Impostare l'intervallo di scalabilità automatica.
Intervallo di scalabilità per le pipeline di scalabilità automatica di streaming
Questa sezione fornisce dettagli sull'intervallo di scalabilità per le pipeline di scalabilità automatica di streaming.
Java
Per i job di scalabilità automatica in modalità flusso che non utilizzano
Streaming Engine, il servizio Dataflow alloca da 1 a 15 dischi permanenti a ogni worker. Questa allocazione significa che il numero minimo di
worker utilizzati per una pipeline di scalabilità automatica di streaming è N/15, dove N è il valore
di --maxNumWorkers.
Per i job di scalabilità automatica di streaming che utilizzano Streaming Engine, il numero minimo di worker è 1.
Dataflow bilancia il numero di dischi permanenti tra i worker. Ad esempio, se la tua pipeline ha bisogno di tre o quattro worker in stato
stabile, puoi impostare --maxNumWorkers=15. La pipeline scala automaticamente tra 1 e 15 worker, utilizzando 1, 3, 5 o 15 worker, che corrispondono rispettivamente a 15, 5, 3 o 1 Persistent Disk per worker.
--maxNumWorkers può essere al massimo 1000.
Python
Per i job di scalabilità automatica in modalità flusso che non utilizzano
Streaming Engine, il servizio Dataflow alloca da 1 a 15 dischi permanenti a ogni worker. Questa allocazione significa che il numero minimo di
worker utilizzati per una pipeline di scalabilità automatica di streaming è N/15, dove N è il valore
di --max_num_workers.
Per i job di scalabilità automatica di streaming che utilizzano Streaming Engine, il numero minimo di worker è 1.
Dataflow bilancia il numero di dischi permanenti tra i worker. Ad esempio, se la pipeline ha bisogno di tre o quattro worker in stato
stabile, puoi impostare --max_num_workers=15. La pipeline scala automaticamente tra 1 e 15 worker, utilizzando 1, 2, 3, 4, 5, 8 o 15 worker, che corrispondono rispettivamente a 15, 8, 5, 4, 3, 2 o 1 Persistent Disk per worker.
--max_num_workers può essere al massimo 1000.
Vai
Per i job di scalabilità automatica in modalità flusso che non utilizzano
Streaming Engine, il servizio Dataflow alloca da 1 a 15 dischi permanenti a ogni worker. Questa allocazione significa che il numero minimo di
worker utilizzati per una pipeline di scalabilità automatica di streaming è N/15, dove N è il valore
di --max_num_workers.
Per i job di scalabilità automatica di streaming che utilizzano Streaming Engine, il numero minimo di worker è 1.
Dataflow bilancia il numero di dischi permanenti tra i worker. Ad esempio, se la pipeline ha bisogno di tre o quattro worker in stato
stabile, puoi impostare --max_num_workers=15. La pipeline scala automaticamente tra 1 e 15 worker, utilizzando 1, 2, 3, 4, 5, 8 o 15 worker, che corrispondono rispettivamente a 15, 8, 5, 4, 3, 2 o 1 Persistent Disk per worker.
--max_num_workers può essere al massimo 1000.
Numero massimo di worker che la scalabilità automatica dello streaming può utilizzare
Java
Dataflow opera entro i limiti della quota di conteggio delle istanze Compute Engine del tuo progetto o maxNumWorkers, a seconda di quale sia inferiore.
Python
Dataflow opera entro i limiti della quota di conteggio delle istanze Compute Engine del tuo progetto o max_num_workers, a seconda di quale sia inferiore.
Vai
Dataflow opera entro i limiti della quota di conteggio delle istanze Compute Engine del tuo progetto o max_num_workers, a seconda di quale sia inferiore.
Limita la scalabilità automatica per ridurre l'impatto sulla fatturazione
Se non vuoi che la scalabilità automatica aumenti la fattura, puoi limitare il numero massimo di worker che il job di streaming può utilizzare.
Java
Se specifichi --maxNumWorkers, limiti l'intervallo di scalabilità utilizzato per elaborare
il job.
Python
Se specifichi --max_num_workers, limiti l'intervallo di scalabilità utilizzato per elaborare
il job.
Vai
Se specifichi --max_num_workers, limiti l'intervallo di scalabilità utilizzato per elaborare
il job.
Modificare l'intervallo di scalabilità
Per informazioni su come modificare l'intervallo di scalabilità in una pipeline di streaming, consulta Imposta l'intervallo di scalabilità automatica.
Disattiva la scalabilità automatica nelle pipeline di streaming
Per disattivare lo scalabilità automatica nella pipeline di streaming, segui questi passaggi.
Java
Imposta --autoscalingAlgorithm=NONE. Per saperne di più, consulta
Disattivare la scalabilità automatica orizzontale.
Python
Imposta --autoscaling_algorithm=NONE. Per saperne di più, consulta
Disattivare la scalabilità automatica orizzontale.
Vai
Imposta --autoscaling_algorithm=NONE. Per saperne di più, consulta
Disattivare la scalabilità automatica orizzontale.
Utilizzare un numero fisso di worker
Per i job di streaming che non utilizzano Streaming Engine, il comportamento predefinito è l'utilizzo di un numero fisso di worker. Per utilizzare la scalabilità automatica dello streaming con queste pipeline, devi attivare esplicitamente l'opzione, perché non è attiva per impostazione predefinita.