Fitur Penyeimbangan Ulang Tugas Dinamis dari layanan Dataflow memungkinkan layanan untuk mempartisi ulang tugas secara dinamis berdasarkan kondisi runtime. Kondisi ini dapat mencakup hal berikut:
- Ketidakseimbangan dalam penugasan tugas
- Worker membutuhkan waktu lebih lama dari yang diperkirakan untuk menyelesaikan tugas
- Worker menyelesaikan tugas lebih cepat dari yang diperkirakan
Layanan Dataflow otomatis mendeteksi kondisi ini dan dapat menetapkan tugas secara dinamis ke worker yang tidak digunakan atau kurang digunakan untuk mengurangi waktu pemrosesan keseluruhan tugas Anda.
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 terwujud, atau saat menggunakan hasil agregasi seperti GroupByKey. Jika sejumlah besar
langkah dalam tugas Anda
digabungkan, tugas Anda akan memiliki lebih sedikit
perantara PCollection, dan penyeimbangan ulang tugas dinamis akan
dibatasi oleh jumlah elemen dalam sumber yang terwujud PCollection. Jika
ingin memastikan penyeimbangan ulang tugas dinamis dapat diterapkan ke
PCollection tertentu dalam pipeline, Anda dapat
mencegah penggabungan dengan beberapa
cara berbeda untuk memastikan paralelisme dinamis.
Penyeimbangan ulang tugas dinamis tidak dapat memparalelkan ulang data yang lebih halus dari satu rekaman. Jika data Anda berisi rekaman individual yang menyebabkan penundaan besar dalam waktu pemrosesan, rekaman tersebut mungkin masih menunda tugas Anda. Dataflow tidak dapat membagi dan mendistribusikan ulang rekaman "hot" individual ke beberapa worker.
Java
Jika Anda menetapkan jumlah shard tetap untuk output akhir pipeline (misalnya, dengan menulis data menggunakan TextIO.Write.withNumShards), Dataflow akan membatasi paralelisme 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 paralelisme berdasarkan jumlah shard yang Anda pilih.
Go
Jika Anda menetapkan jumlah shard tetap untuk output akhir pipeline, Dataflow akan membatasi paralelisme berdasarkan jumlah shard yang Anda pilih.
Menggunakan Sumber Data Kustom
Java
Jika pipeline Anda menggunakan sumber data kustom yang Anda berikan, Anda harus menerapkan metode splitAtFraction agar sumber Anda dapat menggunakan fitur penyeimbangan ulang tugas dinamis.
Jika Anda menerapkan splitAtFraction dengan tidak benar, rekaman dari sumber Anda mungkin tampak diduplikasi atau dihilangkan. Lihat
informasi referensi API di RangeTracker untuk mendapatkan bantuan dan tips tentang cara
menerapkan splitAtFraction.
Python
Jika pipeline Anda menggunakan sumber data kustom yang Anda berikan, RangeTracker Anda harus menerapkan try_claim, try_split, position_at_fraction, dan fraction_consumed agar sumber Anda dapat menggunakan fitur penyeimbangan ulang tugas dinamis.
Lihat informasi referensi API di RangeTracker untuk mengetahui informasi selengkapnya.
Go
Jika pipeline Anda menggunakan sumber data kustom yang Anda berikan, Anda harus menerapkan RTracker yang valid agar sumber Anda dapat menggunakan fitur penyeimbangan ulang tugas dinamis.
Untuk mengetahui informasi selengkapnya, lihat informasi referensi RTracker API.
Penyeimbangan ulang 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.