Come posso rilevare e risolvere le eccezioni ReadProvisionedThroughputExceeded in Flusso di dati Amazon Kinesis?

5 minuti di lettura
0

Ho riscontrato un errore ReadProvisionedThroughputExceeded in Flusso di dati Amazon Kinesis e non so perché ciò stia accadendo.

Breve descrizione

L'errore ReadProvisionedThroughputExceeded si verifica quando Flusso di dati Kinesis limita le chiamate GetRecords per un determinato periodo di tempo.

Se vengono superate le seguenti quote, è possibile che il flusso di dati Amazon Kinesis venga limitato:

  • Ogni partizione supporta fino a cinque transazioni di lettura al secondo o cinque chiamate GetRecords al secondo per ogni partizione.
  • Ogni partizione supporta una velocità di lettura massima di 2 MiB al secondo.
  • GetRecords recupera fino a 10 MiB di dati per chiamata da una singola partizione e fino a 10.000 record per chiamata. Se una chiamata a GetRecords restituisce 10 MiB di dati, le chiamate effettuate entro i 5 secondi successivi generano un errore.

Se si verifica un errore ReadProvisionedThroughputExceeded, completa una delle seguenti operazioni:

  • Identifica la causa principale del problema.
  • Identifica un possibile microburst.
  • Segui le operazioni consigliate per Flusso di dati Kinesis.

Risoluzione

Identifica la causa principale del problema

Per identificare la causa principale dell'errore ReadProvisionedThroughputExceeded in Flusso di dati, monitora il servizio Flusso di dati Amazon Kinesis con Amazon CloudWatch.

Rivedi i seguenti parametri in CloudWatch:

  • GetRecords.Bytes: il numero di byte recuperati dal flusso di dati, misurato in un periodo di tempo specificato.
  • GetRecords.Records: il numero di record recuperati dal flusso di dati in un periodo di tempo specificato.
  • ReadProvisionedThroughputExceeded: il numero di chiamate GetRecords che stanno limitando il flusso di dati.

Configura il pannello di controllo di CloudWatch per visualizzare le statistiche come somma con il periodo di tempo impostato su 1 minuto. Quindi, dividi la somma per 60 secondi per ottenere una media.

Ad esempio, se utilizzi il valore del parametro GetRecords.Records, dividi la somma per 60 secondi per calcolare il numero medio di record inviati al secondo. Quindi, controlla se il valore medio è inferiore ai record inviati al secondo in base al limite impostato per il flusso di dati. Per ulteriori informazioni sulle quote di partizione, consulta la sezione Quote e limiti.

Nota: attiva la funzionalità di monitoraggio avanzato per accertarti che il carico sia distribuito in modo uniforme su tutte le partizioni.

Puoi anche utilizzare il parametro GetRecords.Records con la statistica visualizzata come SampleCount e il periodo di tempo impostato su 1 minuto. Dividi il valore SampleCount per 60 secondi per calcolare il numero medio di chiamate GetRecords effettuate al secondo per ogni partizione. Se il valore medio è di circa cinque chiamate GetRecords al secondo e viene visualizzato un errore ReadProvisionedThroughputExceeded, controlla i consumatori e le quote di partizione. Se i consumatori non superano i limiti di partizione, l'errore ReadProvisionedThroughputExceeded potrebbe essere dovuto al fatto che i consumatori effettuano più di cinque chiamate GetRecords al secondo.

Infine, controlla se esiste una differenza tra il valore ReadProvisionedThroughputExceeded delle partizioni. Se la distribuzione delle partizioni non è uniforme o una partizione riceve più o meno dati rispetto all'altra, può verificarsi uno squilibrio nella distribuzione. Per risolvere questo squilibrio nella distribuzione delle partizioni ed evitare di sovraccaricare le partizioni, usa UUID come chiave di partizione nella chiamata API putRecords.

Identifica un possibile microburst

Sebbene rari, i valori dei parametri possono essere inferiori alle quote di partizione e causare una limitazione del flusso di dati durante una lettura.

Ad esempio, GetRecords.bytes Sum:1min rappresenta 10 MiB di dati letti per 1 minuto. A 1 secondo, la chiamata GetRecords.Gytes legge 2 MiB di dati senza alcuna limitazione. Quindi, dopo 2 secondi la chiamata GetRecords.Bytes legge 8 MiB di dati. Dopo 3 secondi, potrebbero non esserci operazioni di lettura o limitazioni. Sebbene la quota della partizione per il minuto non sia stata raggiunta (2 MiB * 60 = 120 MiB di dati), potresti ricevere un errore ReadProvisionedThroughputExceeded. Se noti un improvviso aumento dei valori dei parametri, cerca il microburst che causa l'eccezione ReadProvisionedThroughputExceeded.

Segui le operazioni consigliate per Flusso di dati Kinesis

Per ridurre le eccezioni ReadProvisionedThroughputExceeded, segui queste best practice:

  • Riordina il flusso per aumentare il numero di partizioni al suo interno.
  • Riduci le dimensioni delle richieste GetRecords. Configura il parametro di limite o riduci la frequenza delle richieste GetRecords.
    Nota: se il consumatore è Amazon Kinesis Data Firehose, il flusso di dati si adatta alla frequenza delle chiamate GetRecords effettuate. Se il consumatore è una funzione AWS Lambda con mappatura dell'origine degli eventi, il flusso viene interrogato una volta al secondo. Non è possibile modificare la frequenza di polling. Se il consumatore è un'applicazione Amazon Kinesis Client Library (KCL), allora regola la frequenza di polling. Per regolare la frequenza di polling, modifica il valore del parametro DEFAULT_IDLETIME_BETWEEN_READS_MILLIS nel file di configurazione KinesisClientLibConfiguration. È possibile impostare dinamicamente questo valore nel codice. Per ulteriori informazioni su come modificare questo valore in KCL, consulta la sezione amazon-kinesis-client sul sito web di GitHub.
  • Distribuisci le operazioni di lettura e scrittura nel modo più uniforme possibile su tutte le partizioni del Flusso di dati.
  • Se il flusso di dati utilizza più di cinque consumatori, utilizza consumatori con fan-out avanzato
  • Se riscontri eccezioni ReadProvisionedThroughputExceeded, utilizza un nuovo meccanismo per i tentativi di errore e backoff esponenziale nella logica del consumatore. Per le applicazioni consumer che utilizzano un SDK AWS, le richieste vengono ritentate per impostazione predefinita.
AWS UFFICIALE
AWS UFFICIALEAggiornata 4 mesi fa