Questo documento descrive come scrivere dati di testo da Dataflow in Pub/Sub utilizzando il PubSubIO
connettore I/O di Apache Beam.
Panoramica
Per scrivere dati in Pub/Sub, utilizza il connettore PubSubIO
. Gli elementi di input possono essere messaggi Pub/Sub o solo i dati del messaggio.
Se gli elementi di input sono messaggi Pub/Sub, facoltativamente puoi impostare attributi o una chiave di ordinamento su ogni messaggio.
Puoi utilizzare la versione Java, Python o Go del connettore PubSubIO
, come segue:
Java
Per scrivere in un singolo argomento, chiama il metodo
PubsubIO.writeMessages
. Questo metodo accetta una raccolta di input di oggetti PubsubMessage
. Il connettore
definisce anche metodi di utilità per la scrittura di stringhe, messaggi Avro con codifica binaria o messaggi protobuf con codifica binaria. Questi metodi convertono la raccolta di input in messaggi Pub/Sub.
Per scrivere in un insieme dinamico di argomenti in base ai dati di input, chiama
writeMessagesDynamic
. Specifica
l'argomento di destinazione per ogni messaggio chiamando PubsubMessage.withTopic
sul messaggio. Ad esempio, puoi instradare i messaggi a diversi argomenti in base al valore di un determinato campo nei dati di input.
Per ulteriori informazioni, consulta la documentazione di riferimento di PubsubIO
.
Python
Chiama il metodo pubsub.WriteToPubSub
.
Per impostazione predefinita, questo metodo accetta una raccolta di input di tipo bytes
,
che rappresenta il payload del messaggio. Se il parametro with_attributes
è
True
, il metodo prende una raccolta di oggetti PubsubMessage
.
Per ulteriori informazioni, consulta la documentazione di riferimento del
modulo pubsub
.
Vai
Per scrivere dati in Pub/Sub, chiama il metodo
pubsubio.Write
. Questo metodo prende una raccolta di input di oggetti PubSubMessage
o di slice di byte contenenti i payload dei messaggi.
Per saperne di più, consulta la documentazione di riferimento del
pacchetto pubsubio
.
Per ulteriori informazioni sui messaggi Pub/Sub, consulta Formato dei messaggi nella documentazione di Pub/Sub.
Timestamp
Pub/Sub imposta un timestamp su ogni messaggio. Questo timestamp rappresenta il momento in cui il messaggio viene pubblicato in Pub/Sub. In uno scenario di streaming, potresti anche tenere conto del timestamp evento, ovvero dell'ora in cui sono stati generati i dati del messaggio. Puoi utilizzare il timestamp dell'elemento di Apache Beam per rappresentare la data e l'ora dell'evento. Le origini che creano un PCollection
illimitato spesso astraggono a ogni nuovo elemento un timestamp che corrisponde all'ora dell'evento.
Per Java e Python, il connettore I/O Pub/Sub può scrivere il timestamp di ogni elemento come attributo del messaggio Pub/Sub. I consumatori di messaggi possono utilizzare questo attributo per ottenere il timestamp dell'evento.
Java
Chiama PubsubIO.Write<T>.withTimestampAttribute
e specifica il nome dell'attributo.
Python
Specifica il parametro timestamp_attribute
quando chiami WriteToPubSub
.
Consegna messaggi
Dataflow supporta l'elaborazione exactly-once dei messaggi all'interno di una pipeline. Tuttavia, il connettore I/O Pub/Sub non può garantire la consegna "exactly-once" dei messaggi tramite Pub/Sub.
Per Java e Python, puoi configurare il connettore Pub/Sub I/O per scrivere l'ID univoco di ogni elemento come attributo del messaggio. I consumatori di messaggi possono quindi utilizzare questo attributo per deduplicare i messaggi.
Java
Chiama PubsubIO.Write<T>.withIdAttribute
e specifica il nome dell'attributo.
Python
Specifica il parametro id_label
quando chiami WriteToPubSub
.
Output diretto
Se attivi la modalità di streaming almeno una volta nella pipeline, il connettore I/O utilizza l'output diretto. In questa modalità, il connettore non esegue il checkpoint dei messaggi, il che consente di scrivere più velocemente. Tuttavia, i tentativi in questa modalità potrebbero causare messaggi duplicati con ID messaggio diversi, rendendo potenzialmente più difficile per i consumatori dei messaggi deduplicare i messaggi.
Per le pipeline che utilizzano la modalità esattamente una volta, puoi attivare l'output diretto impostando l'streaming_enable_pubsub_direct_output
opzione di servizio. L'output diretto
riduce la latenza di scrittura e consente un'elaborazione più efficiente. Valuta questa
opzione se i tuoi utenti possono gestire messaggi duplicati con ID messaggio non unici.
Esempi
L'esempio seguente crea un PCollection
di messaggi Pub/Sub
e li scrive in un argomento Pub/Sub. L'argomento è specificato come
opzione della pipeline. Ogni messaggio contiene i dati del payload e un insieme di attributi.
Java
Per autenticarti a Dataflow, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per autenticarti a Dataflow, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.