Menghentikan pipeline Dataflow yang berjalan

Untuk menghentikan tugas Dataflow, gunakan Google Cloud Console, Cloud Shell, terminal lokal yang diinstal dengan Google Cloud CLI, atau Dataflow REST API.

Anda dapat menghentikan tugas Dataflow dengan salah satu dari tiga cara berikut:

  • Membatalkan tugas. Metode ini berlaku untuk pipeline streaming dan pipeline batch. Membatalkan tugas akan menghentikan layanan Dataflow dari memproses data apa pun, termasuk data yang di-buffer. Untuk mengetahui informasi selengkapnya, lihat Membatalkan tugas.

  • Menghentikan tugas. Metode ini hanya berlaku untuk pipeline streaming. Mengosongkan tugas memungkinkan layanan Dataflow menyelesaikan pemrosesan data yang di-buffer sekaligus menghentikan penyerapan data baru secara bersamaan. Untuk informasi selengkapnya, lihat Mengosongkan tugas.

  • Membatalkan tugas secara paksa. Metode ini berlaku untuk pipeline streaming dan pipeline batch. Membatalkan paksa tugas akan segera menghentikan layanan Dataflow pemrosesan data apa pun, termasuk data yang di-buffer. Sebelum membatalkan paksa, Anda harus mencoba pembatalan reguler terlebih dahulu. Pembatalan paksa hanya ditujukan untuk tugas yang macet dalam proses pembatalan reguler. Untuk mengetahui informasi selengkapnya, lihat Membatalkan tugas secara paksa.

Saat membatalkan tugas, Anda tidak dapat memulai ulang tugas tersebut. Jika tidak menggunakan Template Fleksi, Anda dapat meng-clone pipeline yang dibatalkan dan memulai tugas baru dari pipeline yang di-clone.

Sebelum menghentikan pipeline streaming, pertimbangkan untuk membuat snapshot tugas. Snapshot Dataflow menyimpan status pipeline streaming, sehingga Anda dapat memulai versi baru tugas Dataflow tanpa kehilangan status. Untuk mempelajari lebih lanjut, lihat Menggunakan snapshot Dataflow.

Jika Anda memiliki pipeline yang kompleks, pertimbangkan untuk membuat template dan menjalankan tugas dari template.

Anda tidak dapat menghapus tugas Dataflow, tetapi Anda dapat mengarsipkan tugas yang sudah selesai. Semua tugas yang selesai akan dihapus setelah periode retensi data 30 hari.

Membatalkan tugas Dataflow

Saat Anda membatalkan tugas, layanan Dataflow akan langsung menghentikan tugas tersebut.

Tindakan berikut terjadi saat Anda membatalkan tugas:

  1. Layanan Dataflow menghentikan semua penyerapan data dan pemrosesan data.

  2. Layanan Dataflow mulai membersihkan resource Google Cloud yang terpasang ke tugas Anda.

    Resource ini dapat mencakup penonaktifan instance pekerja Compute Engine dan penutupan koneksi aktif ke sumber atau sink I/O.

Informasi penting tentang membatalkan pekerjaan

  • Jika tugas dibatalkan, pemrosesan pipeline akan langsung terhenti.

  • Anda dapat kehilangan data dalam penerbangan saat membatalkan tugas. Data yang sedang berlangsung mengacu pada data yang sudah dibaca, tetapi masih diproses oleh pipeline.

  • Data yang ditulis dari pipeline ke sink output sebelum Anda membatalkan tugas mungkin masih dapat diakses di sink output.

  • Jika kehilangan data bukan masalah, membatalkan tugas akan memastikan bahwa resource Google Cloud yang terkait dengan tugas Anda dimatikan sesegera mungkin.

Mengosongkan tugas Dataflow

Jika Anda menghabiskan tugas, layanan Dataflow akan menyelesaikan tugas Anda dalam keadaan saat ini. Jika Anda ingin mencegah kehilangan data saat menurunkan pipeline streaming, opsi terbaik adalah menguras tugas Anda.

Tindakan berikut terjadi saat Anda menghabiskan tugas:

  1. Tugas Anda akan berhenti menyerap data baru dari sumber input segera setelah menerima permintaan pengosongan (biasanya dalam beberapa menit).

  2. Layanan Dataflow mempertahankan resource yang ada, seperti instance pekerja, untuk menyelesaikan pemrosesan dan menulis data yang di-buffer di pipeline Anda.

  3. Setelah semua operasi pemrosesan dan operasi tulis yang tertunda selesai, layanan Dataflow akan menonaktifkan resource Google Cloud yang terkait dengan tugas Anda.

Untuk menghabiskan tugas Anda, Dataflow berhenti membaca input baru, menandai sumber dengan stempel waktu peristiwa pada nilai tak terhingga, lalu menyebarkan stempel waktu tak terbatas melalui pipeline. Oleh karena itu, pipeline dalam proses drainase mungkin memiliki watermark yang tidak terbatas.

Informasi penting tentang menghabiskan pekerjaan

  • Mengosongkan tugas tidak didukung untuk pipeline batch.

  • Pipeline Anda akan terus mengeluarkan biaya pemeliharaan resource Google Cloud terkait hingga semua pemrosesan dan penulisan selesai.

  • Anda dapat mengupdate pipeline yang sedang dihabiskan. Jika pipeline Anda bermasalah, mengupdate pipeline dengan kode yang memperbaiki error yang menimbulkan masalah akan memungkinkan pengosongan data yang berhasil tanpa kehilangan data.

  • Anda dapat membatalkan tugas yang saat ini sedang dikosongkan.

  • Mengosongkan tugas dapat memerlukan banyak waktu untuk diselesaikan, misalnya saat pipeline Anda memiliki data yang di-buffer dalam jumlah besar.

  • Jika pipeline streaming Anda menyertakan Splittable DoFn, Anda harus memotong hasilnya sebelum menjalankan opsi pembuangan. Untuk informasi selengkapnya tentang memotong Splittable DoFn, lihat dokumentasi Apache Beam.

  • Dalam beberapa kasus, tugas Dataflow mungkin tidak dapat menyelesaikan operasi pengosongan. Anda dapat melihat log tugas untuk menentukan akar masalah dan mengambil tindakan yang tepat.

Retensi data

  • Streaming Dataflow toleran terhadap pekerja yang memulai ulang dan tidak menggagalkan tugas streaming saat terjadi error. Sebagai gantinya, layanan Dataflow akan mencoba ulang hingga Anda melakukan tindakan seperti membatalkan atau memulai ulang tugas. Saat Anda menghabiskan tugas, Dataflow akan terus mencoba lagi, yang dapat menyebabkan pipeline macet. Dalam situasi ini, untuk mengaktifkan pengosongan yang berhasil tanpa kehilangan data, perbarui pipeline dengan kode yang memperbaiki error yang menimbulkan masalah.

  • Dataflow tidak mengonfirmasi pesan hingga layanan Dataflow secara permanen meng-commit pesan. Misalnya, dengan Kafka, Anda dapat melihat proses ini sebagai penyerahan kepemilikan pesan yang aman dari Kafka ke Dataflow, sehingga tidak berisiko kehilangan data.

Tugas macet

  • Pengosongan tidak akan memperbaiki pipeline yang macet. Jika perpindahan data diblokir, pipeline akan tetap terhenti setelah perintah drain. Untuk mengatasi pipeline yang bermasalah, gunakan perintah update untuk memperbarui pipeline dengan kode yang mengatasi error yang menimbulkan masalah. Anda juga dapat membatalkan tugas yang terhenti, tetapi membatalkan tugas dapat mengakibatkan hilangnya data.

Timer

  • Jika kode pipeline streaming Anda menyertakan timer berulang, tugas mungkin lambat atau tidak dapat dikuras. Karena pengosongan tidak selesai sampai semua timer selesai, pipeline dengan timer berulang tanpa batas tidak akan pernah selesai.

  • Dataflow menunggu hingga semua timer waktu pemrosesan selesai, bukan langsung mengaktifkannya, yang mungkin menyebabkan pengurasan yang lambat.

Efek menghabiskan pekerjaan

Saat Anda menghabiskan pipeline streaming, Dataflow akan segera menutup jendela dalam proses dan mengaktifkan semua pemicu.

Sistem tidak menunggu hingga periode berbasis waktu yang luar biasa selesai dalam operasi pengosongan.

Misalnya, jika pipeline Anda berdurasi sepuluh menit beralih ke periode dua jam saat tugas dihabiskan, Dataflow tidak akan menunggu hingga sisa periode ini selesai. Tindakan ini akan segera menutup jendela dengan hasil yang tidak lengkap. Dataflow menyebabkan jendela terbuka ditutup dengan memajukan watermark data hingga tak terbatas. Fungsi ini juga berfungsi dengan sumber data kustom.

Saat menghabiskan pipeline yang menggunakan class sumber data kustom, Dataflow berhenti mengeluarkan permintaan data baru, memajukan watermark data ke tak terbatas, dan memanggil metode finalize() sumber di check point terakhir.

Mengosongkan jendela dapat menyebabkan jendela terisi sebagian. Dalam hal ini, jika Anda memulai ulang pipeline yang dihabiskan, jendela yang sama mungkin akan diaktifkan untuk kedua kalinya, sehingga dapat menyebabkan masalah pada data Anda. Misalnya, dalam skenario berikut, file mungkin memiliki nama yang bertentangan, dan data mungkin ditimpa:

Jika Anda menghabiskan pipeline dengan jendela setiap jam pada pukul 12.34, jendela pukul 12.00 hingga 13.00 akan ditutup dengan hanya data yang diaktifkan dalam 34 menit pertama jendela tersebut. Pipeline tidak membaca data baru setelah pukul 12.34.

Jika Anda kemudian segera memulai ulang pipeline, periode pukul 12.00 hingga 13.00 akan dipicu lagi, dengan hanya data yang dibaca dari pukul 12.35 hingga 13.00. Tidak ada duplikat yang dikirim, tetapi jika nama file diulang, data akan ditimpa.

Di konsol Google Cloud, Anda dapat melihat detail transformasi pipeline Anda. Diagram berikut menunjukkan efek operasi pengosongan dalam proses. Perlu diketahui bahwa watermark diteruskan ke nilai maksimum.

Tampilan langkah dari operasi pengosongan.

Gambar 1. Tampilan langkah dari operasi pengosongan.

Memaksa membatalkan tugas Dataflow

Gunakan opsi batal paksa hanya jika Anda tidak dapat membatalkan tugas menggunakan metode lain. Pembatalan paksa akan menghentikan tugas tanpa membersihkan semua resource. Jika Anda menggunakan pembatalan paksa berulang kali, resource yang bocor mungkin akan terakumulasi, dan resource yang bocor akan menggunakan kuota Anda.

Saat Anda membatalkan tugas secara paksa, layanan Dataflow akan langsung menghentikan tugas, sehingga membocorkan VM apa pun yang dibuat oleh tugas Dataflow. Pembatalan reguler harus dicoba minimal 30 menit sebelum pembatalan paksa.

Tindakan berikut terjadi saat Anda membatalkan paksa tugas:

  • Layanan Dataflow menghentikan semua penyerapan data dan pemrosesan data.

Informasi penting tentang membatalkan paksa tugas

  • Memaksa membatalkan tugas akan segera menghentikan pemrosesan pipeline.

  • Pembatalan paksa tugas hanya ditujukan untuk tugas yang macet dalam proses pembatalan reguler.

  • Setiap instance worker yang dibuat oleh tugas Dataflow tidak perlu dirilis, yang dapat mengakibatkan kebocoran instance worker. Instance pekerja yang bocor tidak berkontribusi pada biaya tugas, tetapi mungkin menggunakan kuota Anda. Setelah pembatalan tugas selesai, Anda dapat menghapus resource ini.

    Untuk tugas Dataflow Prime, Anda tidak dapat melihat atau menghapus VM yang bocor. Pada umumnya, VM semacam ini tidak menimbulkan masalah. Namun, jika VM yang bocor menyebabkan masalah, seperti menghabiskan kuota VM Anda, hubungi dukungan.

Menghentikan tugas Dataflow

Sebelum menghentikan tugas, Anda harus memahami dampak pembatalan, pengurasan, atau pembatalan paksa tugas.

Konsol

  1. Buka halaman Jobs Dataflow.

    Buka Tugas

  2. Klik tugas yang ingin Anda hentikan.

    Untuk menghentikan tugas, status tugas harus running.

  3. Di halaman detail pekerjaan, klik Stop.

  4. Lakukan salah satu hal berikut:

    • Untuk pipeline batch, klik Cancel atau Force Cancel.

    • Untuk pipeline streaming, klik Cancel, Drain, atau Force Cancel.

  5. Untuk mengonfirmasi pilihan Anda, klik Stop Job.

gcloud

Untuk menghabiskan atau membatalkan tugas Dataflow, Anda dapat menggunakan perintah gcloud dataflow jobs di Cloud Shell atau terminal lokal yang diinstal dengan gcloud CLI.

  1. Login ke shell.

  2. Buat daftar ID tugas untuk tugas Dataflow yang sedang berjalan, lalu catat ID tugas untuk tugas yang ingin Anda hentikan:

    gcloud dataflow jobs list
    

    Jika tanda --region tidak ditetapkan, tugas Dataflow dari semua region yang tersedia akan ditampilkan.

  3. Lakukan salah satu hal berikut:

    • Untuk menghabiskan tugas streaming:

      gcloud dataflow jobs drain JOB_ID
      

      Ganti JOB_ID dengan ID tugas yang Anda salin sebelumnya.

    • Untuk membatalkan tugas batch atau streaming:

      gcloud dataflow jobs cancel JOB_ID
      

      Ganti JOB_ID dengan ID tugas yang Anda salin sebelumnya.

    • Untuk membatalkan paksa tugas batch atau streaming:

      gcloud dataflow jobs cancel JOB_ID --force
      

      Ganti JOB_ID dengan ID tugas yang Anda salin sebelumnya.

API

Untuk membatalkan atau menghabiskan tugas menggunakan Dataflow REST API, Anda dapat memilih projects.locations.jobs.update atau projects.jobs.update. Dalam isi permintaan, teruskan status tugas yang diperlukan di kolom requestedState pada instance tugas API yang dipilih.

Penting: Sebaiknya gunakan projects.locations.jobs.update, karena projects.jobs.update hanya mengizinkan pembaruan status tugas yang berjalan di us-central1.

  • Untuk membatalkan tugas, tetapkan status tugas ke JOB_STATE_CANCELLED.

  • Untuk menghabiskan tugas, setel status tugas ke JOB_STATE_DRAINED.

  • Untuk membatalkan paksa tugas, setel status tugas ke JOB_STATE_CANCELLED dengan label "force_cancel_job": "true". Isi permintaan adalah:

    ​​{
      "requestedState": "JOB_STATE_CANCELLED",
      "labels": {
        "force_cancel_job": "true"
      }
    }
    

Mendeteksi penyelesaian tugas Dataflow

Untuk mendeteksi kapan pembatalan atau pengosongan tugas telah selesai, gunakan salah satu metode berikut:

  • Gunakan layanan orkestrasi alur kerja seperti Cloud Composer untuk memantau tugas Dataflow Anda.
  • Jalankan pipeline secara sinkron sehingga tugas diblokir hingga pipeline selesai. Untuk mengetahui informasi selengkapnya, lihat Mengontrol mode eksekusi di Menyetel opsi pipeline.
  • Gunakan alat command line di Google Cloud CLI untuk memeriksa status tugas. Untuk mendapatkan daftar semua tugas Dataflow di project Anda, jalankan perintah berikut di shell atau terminal Anda:

    gcloud dataflow jobs list
    

    Output menunjukkan ID tugas, nama, status (STATE), dan informasi lainnya untuk setiap tugas. Untuk mengetahui informasi selengkapnya, baca Menggunakan antarmuka command line Dataflow.

Mengarsipkan tugas Dataflow

Saat Anda mengarsipkan tugas Dataflow, tugas tersebut akan dihapus dari daftar tugas di halaman Jobs Dataflow pada konsol. Tugas dipindahkan ke daftar tugas yang diarsipkan. Anda hanya dapat mengarsipkan tugas yang sudah selesai, yang mencakup pekerjaan dengan status berikut:

  • JOB_STATE_CANCELLED
  • JOB_STATE_DRAINED
  • JOB_STATE_DONE
  • JOB_STATE_FAILED
  • JOB_STATE_UPDATED

Untuk mengetahui informasi lebih lanjut, baca bagian Mendeteksi penyelesaian tugas Dataflow dalam dokumen ini. Untuk mengetahui informasi pemecahan masalah, lihat Mengarsipkan error tugas di bagian "Memecahkan masalah error Dataflow".

Semua tugas yang selesai akan dihapus setelah periode retensi data 30 hari.

Mengarsipkan lowongan

Ikuti langkah-langkah berikut untuk menghapus tugas yang selesai dari daftar tugas utama di halaman Jobs Dataflow.

Konsol

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

    Buka Tugas

    Daftar tugas Dataflow akan muncul beserta statusnya.

  2. Pilih pekerjaan.

  3. Di halaman Job Details, klik Arsip. Jika tugas belum selesai, opsi Arsip tidak akan tersedia.

API

Untuk mengarsipkan tugas dengan menggunakan API, gunakan kolom JobMetadata. Di kolom JobMetadata, untuk userDisplayProperties, gunakan pasangan nilai kunci "archived":"true".

Permintaan API Anda juga harus menyertakan parameter kueri updateMask.

curl --request PUT \

"https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/jobs/JOB_ID/?updateMask=job_metadata.user_display_properties._archived" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  --data
'{"job_metadata":{"userDisplayProperties":{"archived":"true"}}}' \
  --compressed

Ganti kode berikut:

  • PROJECT_ID: project ID Anda
  • REGION: Region Dataflow
  • JOB_ID: ID tugas Dataflow Anda

Melihat dan memulihkan pekerjaan yang diarsipkan

Ikuti langkah-langkah berikut untuk melihat tugas yang diarsipkan atau memulihkan tugas yang diarsipkan ke daftar tugas utama di halaman Jobs Dataflow.

Konsol

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

    Buka Tugas

  2. Klik tombol Diarsipkan. Daftar tugas Dataflow yang diarsipkan akan muncul.

  3. Pilih pekerjaan.

  4. Untuk memulihkan tugas ke daftar tugas utama di halaman Jobs Dataflow, pada halaman Job Details, klik Restore.

API

Untuk memulihkan tugas dengan menggunakan API, gunakan kolom JobMetadata. Di kolom JobMetadata, untuk userDisplayProperties, gunakan pasangan nilai kunci "archived":"false".

Permintaan API Anda juga harus menyertakan parameter kueri updateMask.

curl --request PUT \

"https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/jobs/JOB_ID/?updateMask=job_metadata.user_display_properties._archived" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  --data
'{"job_metadata":{"userDisplayProperties":{"archived":"false"}}}' \
  --compressed

Ganti kode berikut:

  • PROJECT_ID: project ID Anda
  • REGION: Region Dataflow
  • JOB_ID: ID tugas Dataflow Anda

Langkah selanjutnya