Menggunakan snapshot Dataflow

Snapshot Dataflow menyimpan status pipeline streaming, sehingga Anda dapat memulai versi baru tugas Dataflow tanpa kehilangan status. Snapshot berguna untuk pencadangan dan pemulihan, pengujian serta roll back update ke pipeline streaming, dan skenario serupa lainnya.

Anda dapat membuat snapshot Dataflow dari setiap tugas streaming yang sedang berjalan. Perlu diperhatikan bahwa setiap tugas baru yang Anda buat dari snapshot akan menggunakan Streaming Engine. Anda juga dapat menggunakan snapshot Dataflow untuk memigrasikan pipeline yang ada ke Streaming Engine yang lebih efisien dan skalabel dengan periode nonaktif minimal.

Panduan ini menjelaskan cara membuat snapshot, mengelola snapshot, dan membuat tugas dari snapshot.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, dan Cloud Resource Manager APIs.

    Enable the APIs

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, dan Cloud Resource Manager APIs.

    Enable the APIs

Membuat snapshot

Konsol

  1. Di konsol Google Cloud, buka halaman Jobs Dataflow.

    Buka Tugas

    Daftar tugas Dataflow akan muncul beserta statusnya. Jika Anda tidak melihat tugas streaming apa pun, Anda perlu menjalankan tugas streaming baru. Untuk contoh tugas streaming, lihat Panduan memulai Menggunakan Template.

  2. Pilih pekerjaan.
  3. Di panel menu di halaman Job details, klik Create snapshot.
  4. Pada dialog Create a snapshot, pilih salah satu opsi berikut:
    • Tanpa sumber data: pilih opsi ini untuk membuat snapshot status tugas Dataflow Anda saja.
    • Dengan sumber data: pilih opsi ini untuk membuat snapshot status tugas Dataflow bersama dengan snapshot sumber Pub/Sub Anda.
  5. Klik Create.

gcloud

Buat snapshot:

gcloud dataflow snapshots create \
    --job-id=JOB_ID \
    --snapshot-ttl=DURATION \
    --snapshot-sources=true \
    --region=REGION

Ganti kode berikut:

  • JOB_ID: ID tugas streaming Anda
  • DURATION: jumlah waktu (dalam hari) sebelum snapshot berakhir. Setelah itu, tidak ada lagi tugas yang dapat dibuat dari snapshot. Tanda snapshot-ttl bersifat opsional, jadi jika tidak ditentukan, masa berlaku snapshot akan berakhir dalam 7 hari. Tentukan nilai dalam format berikut: 5d. Durasi maksimum yang dapat Anda tentukan adalah 30 hari (30d).
  • REGION: region tempat tugas streaming Anda dijalankan

Flag snapshot-sources menentukan apakah akan mengambil snapshot sumber Pub/Sub bersama dengan snapshot Dataflow. Jika true, sumber Pub/Sub akan otomatis di-snapshot dan ID snapshot Pub/Sub ditampilkan dalam respons output. Setelah menjalankan perintah create, periksa status snapshot dengan menjalankan perintah list atau describe.

Hal-hal berikut berlaku saat membuat snapshot Dataflow:

  • Snapshot Dataflow dikenai biaya atas penggunaan disk.
  • Snapshot dibuat di region yang sama dengan tugas.
  • Jika lokasi pekerja tugas berbeda dengan region tugas, pembuatan snapshot akan gagal. Baca panduan Region Dataflow.
  • Anda hanya dapat mengambil snapshot tugas non-Streaming Engine jika tugas tersebut dimulai atau diperbarui setelah 1 Februari 2021.
  • Snapshot Pub/Sub yang dibuat dengan snapshot Dataflow dikelola oleh layanan Pub/Sub dan dikenai biaya.
  • Masa berlaku snapshot Pub/Sub berakhir paling lambat 7 hari sejak pembuatannya. Masa aktif persisnya ditentukan saat pembuatan oleh backlog yang ada di langganan sumber. Secara khusus, masa berlaku snapshot Pub/Sub adalah 7 days - (age of oldest unacked message in the subscription). Misalnya, pertimbangkan langganan yang memiliki pesan terlama yang tidak dikonfirmasi sudah berusia 3 hari. Jika snapshot Pub/Sub dibuat dari langganan ini, snapshot, yang selalu menangkap backlog berusia 3 hari ini selama snapshot ada, akan berakhir dalam 4 hari. Lihat Referensi snapshot Pub/Sub.
  • Selama operasi snapshot, tugas Dataflow Anda akan dijeda dan dilanjutkan setelah snapshot siap. Waktu yang diperlukan bergantung pada ukuran status pipeline. Misalnya, waktu yang diperlukan untuk mengambil snapshot pada tugas Streaming Engine biasanya lebih singkat daripada tugas non-Streaming Engine.
  • Anda dapat membatalkan tugas saat snapshot sedang berlangsung, yang kemudian akan membatalkan snapshot.
  • Anda tidak dapat memperbarui atau menguras tugas saat snapshot sedang berlangsung. Anda harus menunggu hingga tugas dilanjutkan dari proses snapshot sebelum Anda dapat memperbarui atau menghabiskan tugas tersebut.

Menggunakan halaman snapshot

Setelah membuat snapshot, Anda dapat menggunakan halaman Snapshots di Konsol Google Cloud untuk melihat dan mengelola snapshot untuk project Anda.

Mengklik snapshot akan membuka halaman Detail snapshot. Anda dapat melihat metadata tambahan tentang snapshot serta link ke tugas sumber dan snapshot Pub/Sub mana pun.

Halaman detail snapshot Dataflow tempat Anda bisa mendapatkan informasi lebih lanjut tentang snapshot.

Menghapus snapshot

Menghapus snapshot adalah cara untuk menghentikan proses snapshot dan melanjutkan tugas. Selain itu, menghapus snapshot Dataflow tidak otomatis menghapus snapshot Pub/Sub terkait.

Konsol

  1. Di konsol Google Cloud, buka halaman Snapshots Dataflow.

    Buka Snapshot

  2. Pilih ringkasan, lalu klik Hapus.
  3. Pada dialog Delete snapshot, klik Delete untuk mengonfirmasi.

gcloud

Menghapus snapshot:

gcloud dataflow snapshots delete SNAPSHOT_ID \
    --region=REGION

Ganti kode berikut:

  • SNAPSHOT_ID: ID snapshot Anda
  • REGION: region tempat snapshot Anda berada

Untuk mengetahui informasi selengkapnya, lihat referensi perintah delete.

Membuat tugas dari snapshot

Setelah membuat snapshot, Anda dapat memulihkan status tugas Dataflow dengan membuat tugas baru dari snapshot tersebut.

Java

Untuk membuat tugas baru dari snapshot, gunakan tanda --createFromSnapshot dan --enableStreamingEngine.

  • Di shell atau terminal, buat tugas baru dari snapshot. Contoh:
    mvn -Pdataflow-runner compile exec:java \
        -Dexec.mainClass=MAIN_CLASS \
        -Dexec.args="--project=PROJECT_ID \
        --stagingLocation=gs://STORAGE_BUCKET/staging/ \
        --inputFile=gs://apache-beam-samples/shakespeare/* \
        --output=gs://STORAGE_BUCKET/output \
        --runner=DataflowRunner \
        --enableStreamingEngine \
        --createFromSnapshot=SNAPSHOT_ID \
        --region=REGION"

    Ganti kode berikut:

    • MAIN_CLASS atau MODULE: Untuk pipeline Java, lokasi class utama yang berisi kode pipeline Anda. Untuk pipeline Python, lokasi modul yang berisi kode pipeline Anda. Misalnya, saat menggunakan contoh Wordcount, nilainya adalah org.apache.beam.examples.WordCount.
    • PROJECT_ID: project ID Google Cloud Anda
    • STORAGE_BUCKET: bucket Cloud Storage yang Anda gunakan untuk aset tugas sementara dan output akhir
    • SNAPSHOT_ID: ID snapshot snapshot tempat Anda ingin membuat tugas baru
    • REGION: lokasi tempat Anda ingin menjalankan tugas Dataflow baru

Python

Snapshot Dataflow memerlukan Apache Beam SDK untuk Python, versi 2.29.0 atau yang lebih baru.

Untuk membuat tugas baru dari snapshot, gunakan tanda --createFromSnapshot dan --enableStreamingEngine.

  • Di shell atau terminal, buat tugas baru dari snapshot. Contoh:
    python -m MODULE \
        --project PROJECT_ID \
        --temp_location gs://STORAGE_BUCKET/tmp/ \
        --input gs://apache-beam-samples/shakespeare/* \
        --output gs://STORAGE_BUCKET/output \
        --runner DataflowRunner \
        --enable_streaming_engine \
        --create_from_snapshot=SNAPSHOT_ID \
        --region REGION \
        --streaming

    Ganti kode berikut:

    • MAIN_CLASS atau MODULE: Untuk pipeline Java, lokasi class utama yang berisi kode pipeline Anda. Untuk pipeline Python, lokasi modul yang berisi kode pipeline Anda. Misalnya, saat menggunakan contoh Wordcount, nilainya adalah org.apache.beam.examples.WordCount.
    • PROJECT_ID: project ID Google Cloud Anda
    • STORAGE_BUCKET: bucket Cloud Storage yang Anda gunakan untuk aset tugas sementara dan output akhir
    • SNAPSHOT_ID: ID snapshot snapshot tempat Anda ingin membuat tugas baru
    • REGION: lokasi tempat Anda ingin menjalankan tugas Dataflow baru

Hal berikut berlaku saat membuat tugas dari snapshot Dataflow:

  • Tugas yang dibuat dari snapshot harus dijalankan di region yang sama tempat snapshot disimpan.
  • Jika snapshot Dataflow menyertakan snapshot sumber Pub/Sub, tugas yang dibuat dari snapshot Dataflow secara otomatis seek ke snapshot Pub/Sub tersebut sebagai sumber. Anda harus menentukan topik Pub/Sub yang sama dengan yang digunakan oleh tugas sumber saat membuat tugas dari snapshot Dataflow tersebut.

  • Jika snapshot Dataflow tidak menyertakan snapshot sumber Pub/Sub dan tugas sumber menggunakan sumber Pub/Sub, Anda harus menentukan topik Pub/Sub saat membuat tugas dari snapshot Dataflow tersebut.

  • Tugas baru yang dibuat dari snapshot masih harus melalui pemeriksaan kompatibilitas update.

Batasan umum

Batasan berikut berlaku untuk snapshot Dataflow:

  • Anda tidak dapat membuat tugas dari snapshot menggunakan template atau editor Dataflow SQL.
  • Jangka waktu habis masa berlaku snapshot hanya dapat ditetapkan melalui Google Cloud CLI.
  • Snapshot Dataflow hanya mendukung snapshot sumber Pub/Sub.
  • Snapshot sink tidak didukung. Misalnya, Anda tidak dapat membuat snapshot BigQuery saat membuat snapshot Dataflow.

Pemecahan masalah

Bagian ini memberikan petunjuk untuk memecahkan masalah umum yang ditemukan saat berinteraksi dengan snapshot Dataflow.

Sebelum menghubungi dukungan, pastikan Anda telah mengesampingkan masalah yang terkait dengan batasan umum dan di bagian pemecahan masalah berikut.

Permintaan pembuatan snapshot ditolak

Setelah permintaan pembuatan snapshot dikirim, baik dari Google Cloud Console atau gcloud CLI, layanan Dataflow akan melakukan pemeriksaan prasyarat dan menampilkan semua pesan error. Permintaan pembuatan snapshot dapat ditolak karena berbagai alasan yang ditentukan dalam pesan error—misalnya, jika jenis tugas tidak didukung atau region tidak tersedia.

Jika permintaan ditolak karena tugas sudah terlalu lama, Anda harus memperbarui tugas sebelum meminta snapshot.

Pembuatan snapshot gagal

Pembuatan snapshot mungkin gagal karena beberapa alasan. Misalnya, tugas sumber dibatalkan atau project tidak memiliki izin yang tepat untuk membuat snapshot Pub/Sub. Log pesan pekerjaan dari tugas berisi pesan error dari pembuatan snapshot. Jika pembuatan snapshot gagal, tugas sumber akan dilanjutkan.

Gagal membuat tugas dari snapshot

Saat Anda membuat tugas dari snapshot, pastikan snapshot tersebut ada dan tidak habis masa berlakunya. Tugas baru harus dijalankan di Streaming Engine.

Untuk masalah umum pembuatan tugas, lihat panduan pemecahan masalah Dataflow. Secara khusus, tugas baru yang dibuat dari snapshot tunduk pada pemeriksaan kompatibilitas update dengan tugas baru yang harus kompatibel dengan tugas sumber yang di-snapshot.

Tugas yang dibuat dari snapshot hanya menghasilkan sedikit progres

Log pesan pekerjaan untuk tugas berisi pesan error untuk pembuatan tugas. Misalnya, Anda mungkin melihat bahwa tugas tidak dapat menemukan snapshot Pub/Sub. Dalam hal ini, pastikan bahwa snapshot Pub/Sub ada dan masih berlaku. Snapshot Pub/Sub segera berakhir masa berlakunya segera setelah pesan terlama dalam snapshot lebih dari tujuh hari. Snapshot Pub/Sub yang habis masa berlakunya dapat otomatis dihapus oleh layanan Pub/Sub.

Untuk tugas yang dibuat dari snapshot Dataflow yang menyertakan snapshot sumber Pub/Sub, tugas baru mungkin memiliki backlog Pub/Sub yang besar untuk diproses. Penskalaan otomatis streaming dapat membantu tugas baru menyelesaikan backlog dengan lebih cepat.

Tugas sumber yang di-snapshot mungkin sudah berada dalam status tidak responsif sebelum snapshot diambil. Memahami alasan tugas sumber tidak responsif dapat membantu menyelesaikan masalah tugas baru. Untuk mengetahui tips proses debug tugas umum, lihat panduan pemecahan masalah Dataflow.