Penyeimbangan ulang tugas dinamis

Fitur Dynamic Work Rebalancing pada layanan Dataflow memungkinkan layanan membagi ulang pekerjaan secara dinamis berdasarkan kondisi runtime. Kondisi ini dapat mencakup hal berikut:

  • Ketidaksesuaian dalam penugasan kerja
  • Pekerja yang memerlukan waktu lebih lama dari yang diperkirakan untuk menyelesaikannya
  • Pekerja menyelesaikan lebih cepat dari yang diperkirakan

Layanan Dataflow otomatis mendeteksi kondisi ini dan dapat secara dinamis menetapkan pekerjaan kepada pekerja yang tidak digunakan atau kurang digunakan untuk mengurangi keseluruhan waktu pemrosesan tugas.

Batasan

Penyeimbangan ulang tugas dinamis hanya terjadi saat layanan Dataflow memproses beberapa data input secara paralel: saat membaca data dari sumber input eksternal, saat menggunakan PCollection perantara terwujud, atau saat menangani hasil agregasi seperti GroupByKey. Jika sejumlah besar langkah dalam tugas Anda menyatu, tugas Anda memiliki lebih sedikit PCollection menengah, dan penyeimbangan ulang tugas dinamis dibatasi untuk jumlah elemen dalam sumber yang terwujud PCollection. Jika Anda ingin memastikan bahwa penyeimbangan ulang tugas dinamis dapat diterapkan ke PCollection tertentu di pipeline, Anda dapat mencegah fusi dengan beberapa cara untuk memastikan paralelisme dinamis.

Penyeimbangan ulang pekerjaan dinamis tidak dapat memparalelkan data lebih baik dari satu kumpulan data. Jika data Anda berisi masing-masing catatan yang menyebabkan penundaan yang besar pada waktu pemrosesan, catatan tersebut masih dapat menunda tugas Anda. Dataflow tidak dapat membagi dan mendistribusikan ulang setiap data "panas" ke beberapa worker.

Java

Jika Anda menetapkan jumlah shard yang tetap untuk output akhir pipeline (misalnya, dengan menulis data menggunakan TextIO.Write.withNumShards), Dataflow akan membatasi paralelisasi berdasarkan jumlah shard yang Anda pilih.

Python

Jika Anda menetapkan jumlah shard yang tetap untuk output akhir pipeline (misalnya, dengan menulis data menggunakan beam.io.WriteToText(..., num_shards=...)), Dataflow akan membatasi paralelisasi berdasarkan jumlah shard yang Anda pilih.

Go

Jika Anda menetapkan jumlah shard yang tetap untuk output akhir pipeline, Dataflow akan membatasi paralelisasi berdasarkan jumlah shard yang Anda pilih.

Bekerja dengan Sumber Data Khusus

Java

Jika pipeline menggunakan sumber data kustom yang Anda sediakan, Anda harus mengimplementasikan metode splitAtFraction agar sumber Anda dapat berfungsi dengan fitur penyeimbangan ulang tugas dinamis.

Jika Anda salah menerapkan splitAtFraction, catatan dari sumber Anda mungkin tampak duplikat atau dihapus. Lihat informasi referensi API di RangeTracker untuk mendapatkan bantuan dan tips dalam menerapkan splitAtFraction.

Python

Jika pipeline menggunakan sumber data kustom yang Anda sediakan, RangeTracker harus mengimplementasikan try_claim, try_split, position_at_fraction, dan fraction_consumed agar sumber Anda dapat berfungsi dengan fitur penyeimbangan ulang tugas dinamis.

Lihat informasi referensi API di RangeTracker untuk informasi selengkapnya.

Go

Jika pipeline menggunakan sumber data kustom yang Anda sediakan, Anda harus mengimplementasikan RTracker yang valid agar sumber tersebut dapat berfungsi dengan fitur penyeimbangan ulang pekerjaan dinamis.

Untuk informasi selengkapnya, lihat informasi referensi RTracker API.

Penyeimbangan ulang tugas dinamis menggunakan nilai hasil dari metode getProgress() sumber kustom Anda untuk diaktifkan. Implementasi default untuk getProgress() akan menampilkan null. Untuk memastikan penskalaan otomatis diaktifkan, pastikan sumber kustom Anda mengganti getProgress() untuk menampilkan nilai yang sesuai.