Fitur Penyeimbangan Tugas Dinamis dari layanan Dataflow memungkinkan layanan membagi ulang tugas secara dinamis berdasarkan kondisi runtime. Kondisi ini dapat mencakup hal berikut:
- Ketidakseimbangan dalam tugas kerja
- Pekerja memerlukan waktu lebih lama dari yang diperkirakan untuk menyelesaikan tugas
- Pekerja menyelesaikan tugas lebih cepat dari yang diperkirakan
Layanan Dataflow secara otomatis mendeteksi kondisi ini dan dapat secara dinamis menetapkan pekerjaan ke pekerja yang tidak digunakan atau kurang digunakan untuk mengurangi waktu pemrosesan tugas Anda secara keseluruhan.
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 yang diwujudkan, atau saat
menggunakan hasil agregasi seperti GroupByKey
. Jika sejumlah besar
langkah dalam tugas Anda
digabungkan, tugas Anda akan memiliki lebih sedikit
PCollection
perantara, dan penyeimbangan ulang tugas dinamis
dibatasi pada jumlah elemen dalam PCollection
yang diwujudkan sumber. Jika
ingin memastikan bahwa penyeimbangan ulang pekerjaan dinamis dapat diterapkan ke PCollection
tertentu dalam pipeline, Anda dapat
mencegah penggabungan dengan beberapa
cara berbeda untuk memastikan paralelisme dinamis.
Penyeimbangan tugas dinamis tidak dapat melakukan paralelisasi ulang data yang lebih halus daripada satu kumpulan data. Jika data Anda berisi setiap kumpulan data yang menyebabkan penundaan besar dalam waktu pemrosesan, kumpulan data tersebut mungkin masih menunda tugas Anda. Dataflow tidak dapat membagi dan mendistribusikan ulang setiap data "hot" ke beberapa pekerja.
Java
Jika Anda menetapkan jumlah shard 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 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 tetap untuk output akhir pipeline, Dataflow akan membatasi paralelisasi berdasarkan jumlah shard yang Anda pilih.
Bekerja dengan Sumber Data Kustom
Java
Jika pipeline menggunakan sumber data kustom yang Anda berikan, Anda harus menerapkan metode splitAtFraction
agar sumber Anda dapat berfungsi dengan fitur penyeimbangan ulang pekerjaan dinamis.
Jika Anda menerapkan splitAtFraction
dengan tidak benar, data dari sumber Anda mungkin
terlihat diduplikasi atau dihapus. Lihat
informasi referensi API di RangeTracker untuk mendapatkan bantuan dan tips tentang
cara menerapkan splitAtFraction
.
Python
Jika pipeline menggunakan sumber data kustom yang Anda berikan, RangeTracker
harus menerapkan try_claim
, try_split
,
position_at_fraction
, dan fraction_consumed
untuk memungkinkan sumber Anda berfungsi
dengan fitur penyeimbangan ulang pekerjaan dinamis.
Lihat informasi referensi API di RangeTracker untuk informasi selengkapnya.
Go
Jika pipeline menggunakan sumber data kustom yang Anda berikan, Anda harus
menerapkan RTracker
yang valid agar sumber Anda dapat berfungsi dengan fitur
penyeimbangan ulang tugas dinamis.
Untuk informasi selengkapnya, lihat informasi referensi RTracker API.
Penyeimbangan tugas dinamis menggunakan nilai yang ditampilkan dari metode getProgress()
sumber kustom Anda untuk diaktifkan. Implementasi default untuk getProgress()
menampilkan
null
. Untuk memastikan penskalaan otomatis diaktifkan, pastikan sumber kustom Anda mengganti
getProgress()
untuk menampilkan nilai yang sesuai.