Lettura da Pub/Sub a Dataflow

In questa pagina vengono descritte le best practice per la lettura da Pub/Sub in e Dataflow.

Apache Beam fornisce un'implementazione di riferimento di Pub/Sub Connettore I/O per l'utilizzo da parte di runner non Dataflow. Tuttavia, Il runner Dataflow utilizza la propria implementazione personalizzata di rete. Questa implementazione sfrutta le API interne di Google Cloud e per offrire filigrane a bassa latenza, precisione elevata ed efficienti per l'elaborazione dei messaggi "exactly-once". Il connettore è disponibile per Java, Python e Go.

Elaborazione "exactly-once"

Pub/Sub disaccoppia i publisher di eventi dai consumatori di eventi. La pubblica messaggi in un argomento e Pub/Sub invia i messaggi ai sottoscrittori in modo asincrono.

Pub/Sub assegna un ID messaggio univoco a ciascun messaggio pubblicata in un argomento. Per impostazione predefinita, Pub/Sub esegue di recapito dei messaggi at-least-once. Per ottenere la semantica "at-least-once", Pub/Sub ritenta la consegna se non riceve conferma dall'abbonato entro la scadenza di conferma. I nuovi tentativi possono comportare messaggio recapitato più di una volta. Ad esempio, può verificarsi una nuova pubblicazione l'abbonato conferma dopo la scadenza o se la conferma persi a causa di problemi di rete temporanei.

Se esegui la pipeline Dataflow utilizzando modalità flusso di dati "exactly-once" Dataflow deduplica i messaggi per ottenere una semantica "exactly-once". Se la tua pipeline può tollerare alcuni record duplicati, valuta la possibilità di utilizzare modalità flusso di dati almeno una volta. Questa modalità può ridurre significativamente la latenza e il costo totale della pipeline. La un compromesso è che alcuni messaggi potrebbero essere elaborati due volte. Per ulteriori informazioni, consulta l'articolo Scegliere la modalità streaming da utilizzare.

Deduplica in base all'attributo del messaggio

Per impostazione predefinita, Dataflow deduplica in base all'ID messaggio. Tuttavia, un'applicazione può inviare lo stesso record il doppio di due i messaggi Pub/Sub. Ad esempio, i dati di origine originali contenere record duplicati oppure l'applicazione potrebbe pubblicare erroneamente lo stesso messaggio per due volte. Quest'ultimo caso può verificarsi a causa di nuovi tentativi, se il riconoscimento è è calato a causa di problemi di rete o altre interruzioni. In queste situazioni, i messaggi duplicati hanno ID messaggio diversi.

A seconda del tuo scenario, i dati potrebbero contenere un campo univoco utilizzati per deduplicare. Ad esempio, i record potrebbero contenere un ID transazione univoco. Puoi configurare il connettore I/O Pub/Sub per deduplicare in base al valore di un attributo del messaggio, invece che utilizzare ID messaggio Pub/Sub. Purché il publisher imposti questo attributo in modo coerente durante i nuovi tentativi, allora Dataflow può rilevare duplicati. I messaggi devono essere pubblicati in Pub/Sub entro 10 minuti l'uno dall'altro per la deduplicazione.

Per saperne di più sull'utilizzo degli attributi ID, consulta la seguente SDK argomenti di riferimento:

Abbonamenti

Quando configuri la pipeline, devi specificare un valore Pub/Sub o una sottoscrizione Pub/Sub da cui leggere. Se specifichi un abbonamento Pub/Sub, non usare la stessa sottoscrizione Pub/Sub per pipeline di dati. Se due pipeline leggono da una singola sottoscrizione, ciascuna pipeline riceve parte dei dati in modo non deterministico, causando messaggi duplicati, ritardo della filigrana e scalabilità automatica inefficiente. Crea invece una sottoscrizione separata per ogni pipeline.

Se specifichi un argomento, il connettore crea una nuova sottoscrizione temporanea. Questo è univoco per ogni pipeline.

Timestamp e filigrane

Tutti i messaggi Pub/Sub hanno un timestamp, che rappresenta il momento in cui Pub/Sub riceve il messaggio. I tuoi dati potrebbe anche avere un timestamp event, che indica l'ora in cui il record è stato generati dall'origine.

Puoi configurare il connettore in modo che legga il timestamp dell'evento da un attributo su il messaggio Pub/Sub. In questo caso, il connettore utilizza l'evento per la filigrana. Altrimenti, per impostazione predefinita, Timestamp del messaggio Pub/Sub.

Per saperne di più sull'utilizzo dei timestamp degli eventi, consulta l'SDK seguente argomenti di riferimento:

Il connettore Pub/Sub ha accesso API privata che indica l'età del messaggio non confermato meno recente in un abbonamento. Questa API offre una latenza inferiore rispetto a quella disponibile in e configurazione in Cloud Monitoring. Consente a Dataflow di avanzare nella pipeline filigrane ed emettono risultati di calcolo con finestre con basse latenze.

Se configuri il connettore in modo che utilizzi i timestamp degli eventi, Dataflow crea una seconda sottoscrizione Pub/Sub. it utilizza questa sottoscrizione per controllare gli orari degli eventi dei messaggi che sono ancora in per gestire l'arretrato. Questo approccio consente a Dataflow di stimare arretrato e ora dell'evento in modo accurato. Per ulteriori informazioni, visita la pagina di StackOverflow che copre come Dataflow calcola le filigrane Pub/Sub.

Ricerca Pub/Sub

Pub/Sub Seek consente agli utenti di guardare di nuovo messaggi confermati in precedenza. Puoi utilizzare Pub/Sub Seek con Dataflow per rielaborare i messaggi in una pipeline.

Tuttavia, sconsigliamo di utilizzare Pub/Sub Seek in un'istanza una pipeline o un blocco note personalizzato. La ricerca a ritroso in una pipeline in esecuzione può portare a messaggi duplicati o l'eliminazione dei messaggi. Inoltre, invalida Dataflow la logica della filigrana e sono in conflitto con lo stato di una pipeline che incorpora dati elaborati.

Per rielaborare i messaggi utilizzando Pub/Sub Seek, il flusso di lavoro seguente è consigliato:

  1. Crea uno snapshot del abbonamento.
  2. Creare una nuova sottoscrizione per l'argomento Pub/Sub. Il nuovo abbonamento eredita lo snapshot.
  3. Svuota o annulla il job Dataflow attuale.
  4. Invia di nuovo la pipeline utilizzando la nuova sottoscrizione.

Per ulteriori informazioni, vedi Rielaborazione dei messaggi con lo snapshot Pub/Sub e Seek.

Funzionalità Pub/Sub non supportate

Le seguenti funzionalità di Pub/Sub non sono supportate nel Implementazione dell'esecutore Dataflow dell'I/O Pub/Sub di rete.

Backoff esponenziale

Quando crei una sottoscrizione Pub/Sub, puoi configurarla usa un criterio per i nuovi tentativi con backoff esponenziale. Tuttavia, il backoff esponenziale lavorare con Dataflow.

Il backoff esponenziale viene attivato da un riconoscimento negativo o quando la scadenza della conferma. Tuttavia, Dataflow non invia Riconoscimenti negativi in caso di errore del codice della pipeline. Ritenta, invece, il messaggio elaborazione a tempo indeterminato, estendendo costantemente la scadenza di conferma per il messaggio.

Argomenti messaggi non recapitabili

Non è consigliabile utilizzare argomenti messaggi non recapitabili Pub/Sub con Dataflow, per i seguenti motivi:

  • Dataflow invia ringraziamenti negativi per vari motivi (ad esempio, se un worker si sta arrestando). Di conseguenza, i messaggi potrebbero essere recapitati all'argomento messaggi non recapitabili anche se non si verificano errori nel del codice della pipeline.

  • Dataflow potrebbe confermare i messaggi prima che la pipeline sia completamente elabora i dati. Nello specifico, Dataflow riconosce i messaggi Dopo essere stati elaborati correttamente nella prima fase e nel primo lato sono stati scritti nello spazio di archiviazione permanente. Se la pipeline ha più fasi unite e gli errori si verificano in qualsiasi momento dopo nella prima fase, i messaggi sono già stati confermati e non passano argomento messaggi non recapitabili.

Implementa invece il pattern di messaggi non recapitabili esplicitamente nella pipeline. Alcune I sink di I/O dispongono di supporto integrato per le code di messaggi non recapitabili. I seguenti esempi implementare pattern di messaggi non recapitabili;

Consegna "exactly-once" in Pub/Sub

Dato che Dataflow ha i suoi meccanismi per "exactly-once", di elaborazione, sconsigliamo di utilizzare Distribuzione "exactly-once" di Pub/Sub con Dataflow. Attivazione di Pub/Sub "exactly-once" la distribuzione riduce le prestazioni della pipeline, perché limita il numero di messaggi disponibili per l'elaborazione parallela.

Ordinamento dei messaggi Pub/Sub

L'ordinamento dei messaggi è una funzionalità di Pub/Sub che consente al sottoscrittore di ricevere i messaggi nell'ordine in cui sono stati pubblicati.

Non è consigliabile utilizzare l'ordinamento dei messaggi con Dataflow, per per i seguenti motivi:

  • Il connettore di I/O Pub/Sub potrebbe non conservare l'ordinamento dei messaggi.
  • Apache Beam non definisce linee guida rigide sull'ordine in cui vengono elaborati. Di conseguenza, l'ordinamento potrebbe non essere mantenuto nelle trasformazioni downstream.
  • L'uso dell'ordinamento dei messaggi Pub/Sub con Dataflow può aumenta la latenza e diminuisci le prestazioni.

Passaggi successivi