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.