Dokumen ini menjelaskan cara menulis data teks dari Dataflow ke Pub/Sub menggunakan PubSubIO
konektor I/O Apache Beam.
Ringkasan
Untuk menulis data ke Pub/Sub, gunakan konektor PubSubIO
. Elemen input dapat berupa pesan Pub/Sub atau hanya data pesan.
Jika elemen input adalah pesan Pub/Sub, Anda dapat memilih untuk menetapkan atribut atau kunci pengurutan pada setiap pesan.
Anda dapat menggunakan konektor PubSubIO
versi Java, Python, atau Go,
sebagai berikut:
Java
Untuk menulis ke satu topik, panggil metode PubsubIO.writeMessages
. Metode
ini mengambil kumpulan input objek PubsubMessage
. Konektor juga menentukan metode praktis untuk menulis string, pesan Avro berenkode biner, atau pesan protobuf berenkode biner. Metode ini mengonversi koleksi input menjadi pesan Pub/Sub.
Untuk menulis ke kumpulan topik dinamis berdasarkan data input, panggil
writeMessagesDynamic
. Tentukan topik tujuan untuk setiap pesan dengan memanggil PubsubMessage.withTopic
pada pesan tersebut. Misalnya, Anda dapat mengarahkan pesan ke berbagai topik berdasarkan nilai kolom tertentu dalam data input.
Untuk informasi selengkapnya, lihat
dokumentasi referensi
PubsubIO
.
Python
Panggil metode pubsub.WriteToPubSub
.
Secara default, metode ini menggunakan kumpulan input jenis bytes
, yang mewakili payload pesan. Jika parameter with_attributes
adalah
True
, metode ini akan mengambil kumpulan objek PubsubMessage
.
Untuk informasi selengkapnya, lihat
dokumentasi referensi
modul pubsub
.
Go
Untuk menulis data ke Pub/Sub, panggil metode pubsubio.Write
. Metode ini mengambil
kumpulan input dari objek PubSubMessage
atau irisan byte yang berisi
payload pesan.
Untuk informasi selengkapnya, lihat
dokumentasi referensi
pubsubio
paket.
Untuk mengetahui informasi selengkapnya tentang pesan Pub/Sub, baca Format pesan di dokumentasi Pub/Sub.
Stempel waktu
Pub/Sub menetapkan stempel waktu di setiap pesan. Stempel waktu ini menunjukkan waktu saat pesan dipublikasikan ke Pub/Sub. Dalam skenario streaming, Anda mungkin juga perlu memperhatikan stempel waktu peristiwa, yang merupakan waktu saat data pesan dibuat. Anda dapat menggunakan stempel waktu elemen Apache Beam untuk mewakili waktu peristiwa. Sumber yang membuat PCollection
tanpa batas sering kali
menetapkan stempel waktu yang sesuai dengan waktu peristiwa kepada setiap elemen baru.
Untuk Java dan Python, konektor I/O Pub/Sub dapat menulis stempel waktu setiap elemen sebagai atribut pesan Pub/Sub. Konsumen pesan dapat menggunakan atribut ini untuk mendapatkan stempel waktu peristiwa.
Java
Panggil PubsubIO.Write<T>.withTimestampAttribute
dan tentukan nama
atribut.
Python
Tentukan parameter timestamp_attribute
saat Anda memanggil WriteToPubSub
.
Pengiriman pesan
Dataflow mendukung pemrosesan pesan tepat satu kali dalam pipeline. Namun, konektor I/O Pub/Sub tidak dapat menjamin pengiriman pesan tepat satu kali melalui Pub/Sub.
Untuk Java dan Python, Anda dapat mengonfigurasi konektor I/O Pub/Sub untuk menulis ID unik setiap elemen sebagai atribut pesan. Selanjutnya, konsumen pesan dapat menggunakan atribut ini untuk menghapus duplikat pesan.
Java
Panggil PubsubIO.Write<T>.withIdAttribute
dan tentukan nama
atribut.
Python
Tentukan parameter id_label
saat Anda memanggil WriteToPubSub
.
Contoh
Contoh berikut membuat PCollection
pesan Pub/Sub dan menulisnya ke topik Pub/Sub. Topik ditetapkan sebagai opsi pipeline. Setiap pesan berisi data payload dan serangkaian atribut.
Java
Untuk mengautentikasi ke Dataflow, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk mengautentikasi ke Dataflow, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.