Menghentikan pipeline Dataflow yang sedang berjalan

Untuk menghentikan tugas Dataflow, gunakan konsol Google Cloud, 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 agar tidak memproses data apa pun, termasuk data yang di-buffer. Untuk informasi selengkapnya, lihat Membatalkan tugas.

  • Menguras tugas. Metode ini hanya berlaku untuk pipeline streaming. Dengan menghabiskan tugas, layanan Dataflow dapat menyelesaikan pemrosesan data yang di-buffer sekaligus menghentikan penyerapan data baru. Untuk informasi selengkapnya, lihat Menguras tugas.

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

Saat membatalkan tugas, Anda tidak dapat memulai ulang tugas tersebut. Jika tidak menggunakan Template Flex, 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, sebaiknya buat template dan jalankan tugas dari template.

Anda tidak dapat menghapus tugas Dataflow, tetapi Anda dapat mengarsipkan tugas yang telah selesai. Semua tugas yang telah selesai, termasuk tugas dalam daftar tugas yang diarsipkan, akan dihapus setelah periode retensi 30 hari.

Membatalkan tugas Dataflow

Saat Anda membatalkan tugas, layanan Dataflow akan segera menghentikan tugas.

Tindakan berikut akan terjadi saat Anda membatalkan tugas:

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

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

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

Informasi penting tentang membatalkan tugas

  • Membatalkan tugas akan segera menghentikan pemrosesan pipeline.

  • Anda mungkin kehilangan data yang sedang diproses saat membatalkan tugas. Data dalam pengiriman 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 tidak menjadi masalah, membatalkan tugas akan memastikan bahwa resource Google Cloud yang terkait dengan tugas Anda dinonaktifkan sesegera mungkin.

Menguras tugas Dataflow

Saat Anda menghabiskan tugas, layanan Dataflow akan menyelesaikan tugas dalam status saat ini. Jika Anda ingin mencegah kehilangan data saat menghentikan pipeline streaming, opsi terbaiknya adalah menghabiskan tugas.

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 penulisan 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 di infinity, lalu menyebarkan stempel waktu infinity melalui pipeline. Oleh karena itu, pipeline dalam proses pembersihan mungkin memiliki watermark yang tidak terbatas.

Informasi penting tentang menghabiskan tugas

  • Pengosongan tugas tidak didukung untuk pipeline batch.

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

  • Anda dapat memperbarui pipeline yang dikosongkan. Jika pipeline Anda macet, memperbarui pipeline dengan kode yang memperbaiki error yang menyebabkan masalah akan memungkinkan pemborosan yang berhasil tanpa kehilangan data.

  • Anda dapat membatalkan tugas yang sedang menghabiskan daya.

  • Menguras tugas dapat memerlukan waktu yang cukup lama untuk diselesaikan, seperti saat pipeline Anda memiliki data dalam jumlah besar yang di-buffer.

  • Jika pipeline streaming Anda menyertakan Splittable DoFn, Anda harus memotong hasil sebelum menjalankan opsi drain. Untuk informasi selengkapnya tentang memotong DoFn yang Dapat Dipisah, lihat dokumentasi Apache Beam.

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

Retensi data

  • Streaming Dataflow toleran terhadap pekerja yang dimulai ulang dan tidak akan membuat tugas streaming gagal saat error terjadi. Sebagai gantinya, layanan Dataflow akan mencoba lagi hingga Anda mengambil 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 memungkinkan pengosongan yang berhasil tanpa kehilangan data, perbarui pipeline dengan kode yang memperbaiki error yang menyebabkan masalah.

  • Dataflow tidak mengonfirmasi pesan hingga layanan Dataflow melakukan commit secara permanen. Misalnya, dengan Kafka, Anda dapat melihat proses ini sebagai pengalihan kepemilikan pesan yang aman dari Kafka ke Dataflow, sehingga menghilangkan risiko kehilangan data.

Tugas yang macet

  • Menguras tidak akan memperbaiki pipeline yang macet. Jika pergerakan data diblokir, pipeline akan tetap macet setelah perintah drain. Untuk mengatasi pipeline yang macet, gunakan perintah update untuk mengupdate pipeline dengan kode yang menyelesaikan error yang menyebabkan masalah. Anda juga dapat membatalkan tugas yang macet, tetapi membatalkan tugas dapat menyebabkan hilangnya data.

Timer

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

  • Dataflow menunggu hingga semua timer waktu pemrosesan selesai, bukan langsung mengaktifkannya, yang dapat menyebabkan pemborosan daya yang lambat.

Efek dari menghabiskan tugas

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

Sistem tidak menunggu periode berbasis waktu yang belum selesai untuk selesai dalam operasi drain.

Misalnya, jika pipeline Anda sudah berjalan selama sepuluh menit dalam periode dua jam saat Anda menguras tugas, Dataflow tidak akan menunggu sisa periode tersebut selesai. Tindakan ini akan langsung menutup jendela dengan hasil sebagian. Dataflow menyebabkan jendela yang terbuka ditutup dengan memajukan watermark data ke tak terbatas. Fungsi ini juga berfungsi dengan sumber data kustom.

Saat menghabiskan pipeline yang menggunakan class sumber data kustom, Dataflow berhenti mengeluarkan permintaan untuk data baru, memajukan stempel waktu data ke tak terbatas, dan memanggil metode finalize() sumber Anda di checkpoint terakhir.

Pengosongan dapat menyebabkan jendela terisi sebagian. Dalam hal ini, jika Anda memulai ulang pipeline yang habis, periode yang sama mungkin diaktifkan untuk kedua kalinya, yang 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 periode per jam pada pukul 12.34, periode pukul 12.00 hingga pukul 13.00 akan ditutup hanya dengan data yang diaktifkan dalam 34 menit pertama periode tersebut. Pipeline tidak membaca data baru setelah pukul 12.34.

Jika Anda langsung memulai ulang pipeline, periode pukul 12.00 hingga 13.00 akan dipicu lagi, hanya dengan 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. Diagram berikut menunjukkan efek operasi drain dalam proses. Perhatikan bahwa watermark akan ditingkatkan ke nilai maksimum.

Tampilan langkah operasi pembuangan.

Gambar 1. Tampilan langkah operasi pembuangan.

Memaksa membatalkan tugas Dataflow

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

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

Tindakan berikut akan terjadi saat Anda membatalkan tugas secara paksa:

  • Layanan Dataflow menghentikan semua penyerapan data dan pemrosesan data.

Informasi penting tentang membatalkan tugas secara paksa

  • Memaksa pembatalan tugas akan segera menghentikan pemrosesan pipeline.

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

  • Setiap instance pekerja yang dibuat oleh tugas Dataflow tidak selalu dirilis, yang dapat menyebabkan kebocoran instance pekerja. 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 ini tidak menimbulkan masalah. Namun, jika VM yang bocor menyebabkan masalah, seperti menggunakan kuota VM Anda, hubungi dukungan.

Menghentikan tugas Dataflow

Sebelum menghentikan tugas, Anda harus memahami efek dari membatalkan, menguras, atau membatalkan paksa tugas.

Konsol

  1. Buka halaman Tugas Dataflow.

    Buka Tugas

  2. Klik tugas yang ingin Anda hentikan.

    Untuk menghentikan tugas, status tugas harus berjalan.

  3. Di halaman detail tugas, 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 Anda.

  2. Cantumkan ID tugas untuk tugas Dataflow yang saat ini 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 memaksa membatalkan tugas streaming atau batch:

      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 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, tetapkan status tugas ke JOB_STATE_DRAINED.

  • Untuk memaksa pembatalan tugas, tetapkan 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 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 informasi selengkapnya, lihat Mengontrol mode eksekusi di Menetapkan opsi pipeline.
  • Gunakan alat command line di Google Cloud CLI untuk melakukan polling status tugas. Untuk mendapatkan daftar semua tugas Dataflow dalam project Anda, jalankan perintah berikut di shell atau terminal:

    gcloud dataflow jobs list
    

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

Mengarsipkan tugas Dataflow

Saat Anda mengarsipkan tugas Dataflow, tugas akan dihapus dari daftar tugas di halaman Tugas Dataflow di konsol. Tugas akan dipindahkan ke daftar tugas yang diarsipkan. Anda hanya dapat mengarsipkan tugas yang telah selesai, yang mencakup tugas dalam status berikut:

  • JOB_STATE_CANCELLED
  • JOB_STATE_DRAINED
  • JOB_STATE_DONE
  • JOB_STATE_FAILED
  • JOB_STATE_UPDATED

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

Semua tugas yang diarsipkan akan dihapus setelah periode retensi 30 hari.

Mengarsipkan tugas

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

Konsol

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

    Buka Tugas

    Daftar tugas Dataflow akan muncul beserta statusnya.

  2. Pilih tugas.

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

API

Untuk mengarsipkan tugas 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 tugas yang diarsipkan

Ikuti langkah-langkah berikut untuk melihat tugas yang diarsipkan atau memulihkan tugas yang diarsipkan ke daftar tugas utama di halaman Tugas 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 tugas.

  4. Untuk memulihkan tugas ke daftar tugas utama di halaman Tugas Dataflow, di halaman Detail Tugas, klik Pulihkan.

API

Untuk memulihkan tugas 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