Dokumen ini menjelaskan cara menyiapkan ekspor otomatis pesan Pub/Sub Lite ke Pub/Sub.
Berikut adalah beberapa skenario saat Anda mungkin menggunakan fitur ini:
- Berinteraksi antara beban kerja yang menggunakan campuran Pub/Sub Lite dan Pub/Sub.
- Memigrasikan beban kerja Pub/Sub Lite ke Pub/Sub.
- Gunakan fitur Pub/Sub lanjutan, seperti langganan push dan pemfilteran, dari aplikasi yang ada yang didasarkan pada Pub/Sub Lite.
- Menggabungkan beberapa pipeline data.
Ringkasan
Untuk mengekspor pesan dari Pub/Sub Lite ke Pub/Sub, Anda membuat jenis langganan khusus yang disebut langganan ekspor. Langganan ekspor menerima pesan dari topik Lite, mengonversinya menjadi pesan Pub/Sub, dan mengirim pesan yang dikonversi ke topik Pub/Sub tujuan.
Topik Lite dapat memiliki kombinasi langganan ekspor dan langganan standar. Kedua jenis langganan tersebut identik dalam hal penggunaan kuota dan throughput reservasi. Langganan ekspor menggunakan kapasitas throughput langganan Lite dan dikenai biaya untuk throughput publikasi Pub/Sub.
Langganan ekspor menghubungkan topik Lite ke tepat satu topik Pub/Sub. Namun, topik Lite dapat memiliki beberapa langganan ekspor yang terhubung ke topik Pub/Sub yang berbeda (arsitektur fan-out). Anda juga dapat mengekspor dari beberapa topik Lite ke topik Pub/Sub yang sama (arsitektur fan-in).
Autentikasi
Langganan ekspor mengakses resource Pub/Sub Lite dan Pub/Sub. Untuk membuat langganan ekspor, Anda memerlukan izin berikut:
pubsublite.subscriptions.create
. Peran bawaan berikut berisi izin ini:roles/pubsublite.admin
roles/pubsublite.editor
pubsub.topics.get
. Peran bawaan berikut berisi izin ini:roles/pubsub.admin
roles/pubsub.editor
roles/pubsub.viewer
Lihat Kontrol Akses untuk Pub/Sub.
Agen layanan
Langganan ekspor memublikasikan ke topik Pub/Sub atas nama Anda. Untuk melakukannya, aplikasi ini menggunakan agen layanan.
Setelah Anda membuat langganan ekspor pertama di project, agen layanan Pub/Sub Lite akan otomatis dibuat. Jika Anda membuat langganan ekspor tambahan dalam project yang sama, langganan tersebut akan menggunakan agen layanan yang sama. Agen layanan memiliki skema penamaan berikut:
service-<your_project_number>@gcp-sa-pubsublite.
.
Agen layanan dibuat dengan izin untuk memublikasikan ke semua
topik Pub/Sub dan Pub/Sub Lite dalam project
yang sama dengan langganan ekspor. Jika topik Pub/Sub tujuan berada dalam project yang berbeda dengan langganan ekspor, Anda harus memberikan izin tambahan kepada agen layanan dengan menambahkan peran Pub/Sub Publisher (roles/pubsub.publisher
). Anda dapat memberikan izin untuk seluruh project atau topik individual. Sebaiknya berikan izin di tingkat topik,
mengikuti prinsip hak istimewa terendah.
Untuk mengetahui informasi selengkapnya, lihat
Mengontrol akses melalui Konsol Google Cloud.
Anda juga dapat menggunakan perintah gcloud projects add-iam-policy-binding
untuk menambahkan peran IAM:
gcloud pubsub topics add-iam-policy-binding TOPIC_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsublite. --role=roles/pubsub.publisher
Ganti kode berikut:
- TOPIC_NAME: Nama topik Pub/Sub tujuan untuk menambahkan binding kebijakan IAM.
- PROJECT_NUMBER: Nomor project project langganan ekspor Pub/Sub Lite.
Membuat langganan ekspor
Anda dapat membuat langganan ekspor Lite dengan konsol Google Cloud, Google Cloud CLI, atau Pub/Sub Lite API.
Langganan ekspor Lite harus berada di project dan lokasi yang sama dengan topik Lite yang dilampirkan. Untuk membuat topik Lite, lihat Membuat dan mengelola topik Lite.
Jika Anda melampirkan langganan ekspor ke topik Lite, pastikan semua pesan yang dipublikasikan ke topik Lite kompatibel dengan Pub/Sub. Untuk mengetahui informasi selengkapnya, lihat Kompatibilitas pesan.
Setelah dibuat, Anda tidak dapat mengubah langganan ekspor menjadi langganan standar, atau sebaliknya.
Konsol
Buka halaman Langganan Lite.
Klik Buat langganan Lite.
Masukkan ID langganan Lite.
Pilih topik Lite untuk menerima pesan.
Pilih Kirim pesan langsung atau Kirim pesan setelah disimpan.
Pilih jenis Offset awal.
Pilih Ekspor ke topik Pub/Sub.
Di daftar Destination topic, pilih topik Pub/Sub untuk menerima pesan Lite yang diekspor.
Opsional. Tentukan topik yang dihentikan pengirimannya.
- Centang kotak Enable dead lettering.
- Pilih topik Lite yang akan digunakan sebagai topik yang dihentikan pengirimannya, atau klik Buat Topik Lite untuk membuat topik yang dihentikan pengirimannya yang baru. Topik dead-letter harus berada di lokasi (zona atau region) dan project yang sama dengan langganan ekspor.
Klik Create.
gcloud
Untuk membuat langganan ekspor, gunakan perintah
gcloud pubsub lite-subscriptions create
:
gcloud pubsub lite-subscriptions create SUBSCRIPTION_ID \ --location=LOCATION \ --topic=TOPIC_ID \ --export-pubsub-topic=PUBSUB_TOPIC_NAME \ --export-dead-letter-topic=DEAD_LETTER_TOPIC_ID \ --export-desired-state=DESIRED_STATE
Ganti kode berikut:
- SUBSCRIPTION_ID: ID langganan Lite yang akan dibuat.
- LOCATION: Lokasi langganan Lite.
- TOPIC_ID: ID topik Lite yang akan dilampirkan ke langganan Lite.
- PUBSUB_TOPIC_NAME: Nama topik Pub/Sub yang akan
diekspor. Tentukan nama lengkap jika topik berada dalam project lain:
projects/my-project-id/topics/my-topic-id
. - DEAD_LETTER_TOPIC_ID: Opsional. ID topik Lite yang akan digunakan sebagai topik surat mati. Topik yang dihentikan pengirimannya harus berada di lokasi (zona atau region) dan project yang sama dengan langganan ekspor.
- DESIRED_STATE: Opsional. Status awal langganan.
Nilai berikut didukung:
active
: Langganan mengekspor pesan Lite ke Pub/Sub. (Default.)paused
: Ekspor pesan Lite ditangguhkan.
Jika permintaan berhasil, command line akan menampilkan konfirmasi:
Created [SUBSCRIPTION_ID].
Protokol
Untuk membuat langganan ekspor Lite, kirim permintaan POST
seperti
berikut:
POST https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID Authorization: Bearer $(gcloud auth print-access-token)
Ganti kode berikut:
- REGION: Region tempat menyimpan langganan Lite.
- PROJECT_NUMBER: Nomor project tempat membuat langganan Lite.
- LOCATION: Nama lokasi yang didukung Pub/Sub Lite.
- SUBSCRIPTION_ID: ID langganan Lite.
Tentukan kolom berikut dalam isi permintaan:
{ "topic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID", "deliveryConfig": { "deliveryRequirement": "DELIVERY_REQUIREMENT", }, "exportConfig": { "desiredState": "DESIRED_STATE", "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID", "pubsubConfig": { "topic": "PUBSUB_TOPIC_NAME" } } }
Ganti kode berikut:
- DELIVERY_REQUIREMENT: Persyaratan pengiriman,
DELIVER_AFTER_STORED
atauDELIVER_IMMEDIATELY
. - DESIRED_STATE: Status awal untuk langganan. Nilai
berikut didukung:
ACTIVE
: Langganan mengekspor pesan Lite ke Pub/Sub.PAUSED
: Ekspor pesan Lite ditangguhkan.
- DEAD_LETTER_TOPIC_ID: ID topik Lite yang ada untuk digunakan sebagai topik yang dihentikan pengirimannya. Topik harus berada di lokasi (zona atau region) dan project yang sama dengan langganan ekspor itu sendiri.
- PUBSUB_TOPIC_NAME: Nama topik Pub/Sub yang akan menjadi tujuan ekspor. Contoh format:
projects/my-project-id/topics/my-topic-id
.
Jika permintaan berhasil, responsnya adalah langganan Lite dalam format JSON:
{ "deliveryConfig": { "deliveryRequirement": "DELIVERY_REQUIREMENT", }, "exportConfig": { "desiredState": "DESIRED_STATE", "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID", "pubsubConfig": { "topic": "PUBSUB_TOPIC_NAME" }, "name": "projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID", "topic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID", }
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Pub/Sub Go API.
Java
Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Java di Library Klien Pub/Sub Lite.
Python
Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Python di Library Klien Pub/Sub Lite.
Memperbarui langganan ekspor
Anda dapat memperbarui langganan Lite dengan konsol Google Cloud, Google Cloud CLI, atau Pub/Sub Lite API. Diperlukan waktu hingga 30 detik untuk menerapkan setelan baru.
Konsol
Buka halaman Langganan Lite.
Klik ID langganan Lite.
Di halaman Detail langganan Lite, klik Edit.
gCloud
Untuk memperbarui langganan Lite, gunakan perintah
gcloud pubsub lite-subscriptions update
:
gcloud pubsub lite-subscriptions update SUBSCRIPTION_ID \ --location=LOCATION \ --delivery-requirement=DELIVERY_REQUIREMENT \ --export-pubsub-topic=PUBSUB_TOPIC_NAME \ --export-dead-letter-topic=DEAD_LETTER_TOPIC_ID \ --export-desired-state=DESIRED_STATE
Ganti kode berikut:
- SUBSCRIPTION_ID: ID langganan Lite
- LOCATION: Lokasi langganan Lite.
- DELIVERY_REQUIREMENT: Opsional. Persyaratan pengiriman, antara
deliver-after-stored
ataudeliver-immediately
. - PUBSUB_TOPIC_NAME: Opsional. Nama topik Pub/Sub yang akan diekspor. Tentukan nama lengkap jika topik berada dalam project lain:
projects/my-project-id/topics/my-topic-id
. - DEAD_LETTER_TOPIC_ID: ID topik Lite yang ada untuk digunakan sebagai topik yang dihentikan pengirimannya. Topik harus berada di lokasi (zona atau region) dan project yang sama dengan langganan ekspor itu sendiri.
- DESIRED_STATE: Opsional. Status langganan yang diinginkan.
Nilai berikut didukung:
active
: Langganan mengekspor pesan Lite ke Pub/Sub. (Default.)paused
: Ekspor pesan Lite ditangguhkan.
Jika permintaan berhasil, command line akan menampilkan langganan Lite:
Updated subscription [SUBSCRIPTION_ID]. deliveryConfig: deliveryRequirement: DELIVERY_REQUIREMENT exportConfig: currentState: DESIRED_STATE deadLetterTopic: projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID desiredState: DESIRED_STATE pubsubConfig: topic: PUBSUB_TOPIC_NAME name: projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID topic: projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID
Protokol
Untuk memperbarui langganan Lite, kirim permintaan PATCH
seperti berikut:
PATCH https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID?updateMask=deliveryConfig.deliveryRequirement,exportConfig Authorization: Bearer $(gcloud auth print-access-token)
Ganti kode berikut:
- REGION: Region tempat langganan Lite dibuat.
- PROJECT_NUMBER: Nomor project tempat langganan Lite dibuat.
- LOCATION: Lokasi tempat langganan Lite dibuat.
- SUBSCRIPTION_ID: ID langganan Lite.
Tentukan kolom berikut dalam isi permintaan:
{ "deliveryConfig": { "deliveryRequirement": "DELIVERY_REQUIREMENT", }, "exportConfig": { "desiredState": "DESIRED_STATE", "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID", "pubsubConfig": { "topic": "PUBSUB_TOPIC_NAME" } } }
Ganti kode berikut:
- DELIVERY_REQUIREMENT: Persyaratan pengiriman,
DELIVER_AFTER_STORED
atauDELIVER_IMMEDIATELY
. - DESIRED_STATE: Status yang diinginkan untuk langganan. Nilai
berikut didukung:
ACTIVE
: Langganan mengekspor pesan Lite ke Pub/Sub.PAUSED
: Ekspor pesan Lite ditangguhkan.
- DEAD_LETTER_TOPIC_ID: ID topik Lite yang ada untuk digunakan sebagai topik yang dihentikan pengirimannya. Topik harus berada di lokasi (zona atau region) dan project yang sama dengan langganan ekspor itu sendiri.
- PUBSUB_TOPIC_NAME: Nama topik Pub/Sub tujuan. Contoh format:
projects/my-project-id/topics/my-topic-id
.
Jika permintaan berhasil, responsnya adalah langganan Lite dalam format JSON:
{ "deliveryConfig": { "deliveryRequirement": "DELIVERY_REQUIREMENT", }, "exportConfig": { "desiredState": "DESIRED_STATE", "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID", "pubsubConfig": { "topic": "PUBSUB_TOPIC_NAME" } }, "name": "projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID", "topic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID", }
Menjeda atau memulai langganan ekspor
Langganan ekspor memiliki setelan yang disebut status yang diinginkan, yang memiliki salah satu dari dua nilai:
- Aktif: Langganan mengekspor pesan Lite ke Pub/Sub.
- Dijeda: Ekspor pesan Lite ditangguhkan.
Untuk mengubah status yang diinginkan di konsol Google Cloud:
Buka halaman Langganan Lite.
Klik ID langganan Lite.
Di halaman Detail langganan Lite, klik Jeda atau Mulai.
Anda juga dapat memperbarui status yang diinginkan menggunakan Google Cloud CLI atau Pub/Sub Lite API. Lihat Memperbarui langganan ekspor.
Praktik terbaik
Bagian ini menjelaskan beberapa praktik terbaik saat menggunakan langganan ekspor.
Reservasi
Sebaiknya gunakan langganan ekspor dengan reservasi, bukan menetapkan secara eksplisit kapasitas throughput langganan.
Kompatibilitas pesan
Jika pesan Pub/Sub Lite tidak kompatibel dengan Pub/Sub, langganan ekspor tidak akan memublikasikan pesan ke Pub/Sub. Sebagai gantinya, pesan akan ditempatkan dalam topik surat mati, jika ada. Jika tidak ada topik dead-letter yang ditetapkan, pesan yang tidak kompatibel akan dihapus.
Saat memublikasikan pesan ke topik Lite, perhatikan masalah kompatibilitas berikut:
Kunci. Kunci Pub/Sub Lite memiliki jenis
bytes
, sedangkan kunci pengurutan Pub/Sub adalah jenisstring
. Agar kompatibel, kunci Pub/Sub Lite hanya boleh berisi karakter UTF-8.Atribut. Atribut pesan memiliki persyaratan berikut:
- Agar kompatibel, semua atribut pesan Pub/Sub Lite harus memiliki satu nilai. Pub/Sub Lite mendukung atribut pesan dengan beberapa nilai, tetapi Pub/Sub hanya mendukung atribut nilai tunggal.
- Atribut pesan tidak boleh melebihi batas pesan Pub/Sub, termasuk atribut maksimum per pesan, dan ukuran kunci dan nilai maksimum per atribut.
Topik yang dihentikan pengirimannya
Untuk mempertahankan dan menangani pesan yang tidak kompatibel, sebaiknya gunakan topik pesan tidak terkirim. Anda dapat menetapkan topik dead-letter saat membuat langganan ekspor, atau memperbarui langganan ekspor yang ada untuk menggunakan topik dead-letter. Jika menerima pesan yang tidak kompatibel dengan Pub/Sub, langganan akan memublikasikan pesan tersebut ke topik yang dihentikan pengirimannya.
Topik yang dihentikan pengirimannya adalah topik Pub/Sub Lite reguler. File ini harus berada di lokasi dan project yang sama dengan langganan ekspor, dan harus merupakan topik yang berbeda dari topik sumber.
Biasanya, topik yang dihentikan pengirimannya memiliki penggunaan throughput yang rendah. Oleh karena itu, sebaiknya tentukan reservasi ke topik yang dihentikan pengirimannya, bukan alokasikan throughput ke topik.
Error pengiriman
Langganan ekspor mencoba mengirimkan semua pesan yang kompatibel ke topik Pub/Sub tujuan. Jika pengiriman pesan gagal, langganan ekspor akan ditangguhkan. Untuk menemukan kategori error, periksa metrik subscription/export_status
. Nilai berikut menunjukkan error:
PERMISSION_DENIED
: Izin tidak memadai untuk mengekspor pesan.NOT_FOUND
: Satu atau beberapa resource tidak ditemukan; misalnya, topik tujuan tidak ada.
Untuk mengetahui informasi selengkapnya tentang pemecahan masalah, lihat Memecahkan masalah langganan ekspor.
Setelah Anda menyelesaikan error, langganan ekspor akan otomatis dimulai ulang karena percobaan ulang berkala.
Harga
Anda akan ditagih untuk resource Pub/Sub Lite dan Pub/Sub yang digunakan langganan ekspor. Secara khusus, Anda akan ditagih untuk throughput dan penyimpanan langganan yang dialokasikan di langganan Pub/Sub Lite, yang dikonfigurasi untuk topik Pub/Sub Lite. Anda juga akan ditagih untuk memublikasikan ke topik Pub/Sub tujuan. Lihat Harga Pub/Sub.
Tidak ada biaya tambahan untuk menggunakan fitur ekspor, dan tidak ada perbedaan harga antara langganan ekspor Pub/Sub Lite dan langganan standar.
Memecahkan masalah langganan ekspor
Bagian ini menjelaskan beberapa tips pemecahan masalah untuk langganan ekspor.
Langganan ekspor dijeda
Jika langganan dijeda, tidak ada pesan yang diekspor.
Untuk mendeteksi masalah ini:
Konsol Google Cloud: Lihat detail langganan. Jika langganan dijeda, Status yang diinginkan dan Status saat ini adalah
Paused
.Metrik: Metrik
subscription/export_status
adalahPAUSED
.
Untuk mengatasi masalah ini, mulai langganan.
Topik tujuan atau topik yang dihentikan pengirimannya telah dihapus
Jika Anda menghapus topik Pub/Sub yang dilampirkan ke langganan ekspor, atau menghapus topik yang dihentikan pengirimannya, error akan terjadi.
Untuk mendeteksi masalah ini:
Konsol Google Cloud: Lihat detail langganan. Jika topik telah dihapus, Status saat ini adalah
Not found
.Metrik: Metrik
subscription/export_status
. Jika topik telah dihapus, nilainya adalahNOT_FOUND
.
Untuk mengatasi masalah ini, periksa topik Pub/Sub tujuan dan topik dead-letter (jika ada yang dikonfigurasi).
Jika Pub/Sub tujuan dihapus, buat ulang topik dengan nama yang sama. Langganan ekspor akan melanjutkan publikasi, dengan asumsi izin tidak berubah.
Jika topik yang dihentikan pengirimannya dihapus, buat topik yang dihentikan pengirimannya baru dan perbarui langganan ekspor untuk mereferensikannya.
Pesan yang tidak kompatibel
Jika tidak kompatibel dengan Pub/Sub, pesan tidak akan diekspor.
Untuk mendeteksi masalah ini:
- Metrik: Metrik
subscription/unexportable_message_count
menunjukkan jumlah pesan yang tidak kompatibel yang tidak dapat diekspor.
Untuk mengatasi masalah ini, gunakan topik dead-letter untuk mempertahankan pesan yang tidak kompatibel. Periksa pesan untuk menentukan penyebabnya, lalu ubah dan publikasikan ulang jika perlu. Lihat Kompatibilitas pesan.
Ekspor dibatasi
Untuk mendeteksi masalah ini:
- Metrik: Metrik
subscription/flow_control_status
menunjukkan alasan kontrol aliranNO_CLIENT_TOKENS
, yang menunjukkan bahwa batas per partisi byte atau pesan yang belum selesai telah tercapai. Hingga masalah teratasi, backlog akan meningkat untuk langganan ekspor terkait.
Error ini memiliki beberapa kemungkinan akar masalah. Sebagian besar kemungkinan penyebabnya terjadi di backend, tetapi periksa hal berikut:
- Pastikan Anda memublikasikan pesan Lite yang menggunakan kunci yang sama dengan kecepatan kurang dari 1 MiB/s per kunci. Langganan ekspor menulis kunci pesan Lite sebagai kunci pengurutan Pub/Sub, dan Pub/Sub memiliki batas 1 MiB/s pada setiap kunci pengurutan. Melebihi batas ini dapat menyebabkan throttling.
Pengguna tidak diberi otorisasi untuk melakukan tindakan ini
Agen layanan Pub/Sub Lite harus memiliki izin untuk memublikasikan ke topik Pub/Sub tujuan.
Untuk mendeteksi masalah ini:
Konsol Google Cloud: Lihat detail langganan. Jika ada error izin, Status saat ini adalah
Permission denied
.Metrik: Metrik
subscription/export_status
adalahPERMISSON_DENIED
.
Misalnya, situasi berikut dapat menyebabkan error ini:
- Agen layanan Pub/Sub Lite tidak memiliki izin atau peran yang benar untuk memublikasikan pesan ke topik Pub/Sub tujuan di project lain.
- Agen layanan dihapus dari kebijakan IAM project induk langganan ekspor.
- Agen layanan Pub/Sub Lite masih disiapkan. Agen layanan otomatis dibuat saat Anda membuat langganan ekspor pertama dalam project. Error izin akan otomatis teratasi dalam waktu 10 menit.
Untuk mengatasi masalah ini, periksa apakah agen layanan diberi izin atau peran yang benar. Lihat Agen layanan.
Langkah selanjutnya
Pilih antara Pub/Sub atau Pub/Sub Lite.