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 su un singolo argomento, richiama il metodo
PubsubIO.writeMessages
. Questo
accetta una raccolta di input di PubsubMessage
oggetti. Il connettore
definisce anche metodi di convenienza per scrivere stringhe, file Avro con codifica binaria
o messaggi protobuf con codifica binaria. Questi metodi convertono l'input
la raccolta nei messaggi Pub/Sub.
Per scrivere in un insieme dinamico di argomenti in base ai dati di input, richiama
writeMessagesDynamic
Specifica
l'argomento di destinazione per ogni messaggio chiamando PubsubMessage.withTopic
su
il messaggio. Ad esempio, puoi indirizzare i messaggi a diversi argomenti in base
il valore di un determinato campo nei dati di input.
Per ulteriori informazioni, consulta
PubsubIO
documentazione di riferimento.
Python
Chiama il metodo pubsub.WriteToPubSub
.
Per impostazione predefinita, questo metodo accetta una raccolta di input di tipo bytes
,
che rappresenta il payload dei messaggi. Se il parametro with_attributes
è
True
, il metodo prende una raccolta di oggetti PubsubMessage
.
Per ulteriori informazioni, consulta
Modulo pubsub
documentazione di riferimento.
Vai
Per scrivere dati in Pub/Sub, chiama il metodo
pubsubio.Write
. Questo metodo prende un
raccolta di input di oggetti PubSubMessage
o sezioni di byte che contengono
i payload dei messaggi.
Per ulteriori informazioni, consulta
Pacchetto pubsubio
documentazione di riferimento.
Per ulteriori informazioni sui messaggi Pub/Sub, vedi Formato del messaggio nel documentazione di Pub/Sub.
Timestamp
Pub/Sub imposta un timestamp per ciascun messaggio. Questo timestamp
rappresenta l'ora in cui il messaggio viene pubblicato in Pub/Sub. In un
dello scenario di streaming, ti potrebbe interessare anche il timestamp dell'evento, che
è l'ora in cui sono stati generati i dati del messaggio. Puoi utilizzare Apache Beam
timestamp elemento
per rappresentare 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 di I/O Pub/Sub può scrivere ogni come attributo di messaggio Pub/Sub. Messaggio i consumatori possono utilizzare questo attributo per ottenere il timestamp dell'evento.
Java
Richiama PubsubIO.Write<T>.withTimestampAttribute
e specifica il nome del
.
Python
Specifica il parametro timestamp_attribute
quando chiami WriteToPubSub
.
Consegna messaggi
Dataflow supporta 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 di I/O Pub/Sub per scrivere l'ID univoco di ogni elemento come attributo del messaggio. I consumatori dei messaggi possono e 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
.
Esempi
L'esempio seguente crea un PCollection
dei messaggi Pub/Sub
e le scrive in un argomento Pub/Sub. L'argomento viene specificato come
pipeline di dati. Ogni messaggio contiene dati di payload e un set di attributi.
Java
Per eseguire l'autenticazione in Dataflow, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per eseguire l'autenticazione in Dataflow, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.