Penskalaan Otomatis Horizontal memungkinkan Dataflow memilih jumlah instance pekerja yang sesuai untuk tugas Anda, dengan menambahkan atau menghapus pekerja sesuai kebutuhan. Dataflow diskalakan berdasarkan penggunaan CPU rata-rata pekerja dan paralelisme pipeline. Paralelisme pipeline adalah estimasi jumlah thread yang diperlukan untuk memproses data secara paling efisien pada waktu tertentu.
Penskalaan Otomatis Horizontal didukung di pipeline batch dan streaming.
Penskalaan otomatis batch
Penskalaan Otomatis Horizontal diaktifkan secara default di semua pipeline batch. Dataflow secara otomatis memilih jumlah pekerja berdasarkan perkiraan jumlah total pekerjaan di setiap tahap pipeline Anda. Estimasi ini bergantung pada ukuran input dan throughput saat ini. Setiap 30 detik, Dataflow mengevaluasi ulang jumlah pekerjaan sesuai dengan progres eksekusi. Saat estimasi jumlah total pekerjaan meningkat atau menurun, Dataflow akan menskalakan jumlah pekerja secara dinamis ke atas atau ke bawah.
Jumlah pekerja bersifat sublinear terhadap jumlah pekerjaan. Misalnya, tugas dengan pekerjaan dua kali lipat memiliki pekerja kurang dari dua kali lipat.
Jika salah satu kondisi berikut terjadi, Dataflow akan mempertahankan atau mengurangi jumlah pekerja, untuk menghemat resource yang tidak ada aktivitasnya:
- Penggunaan CPU pekerja rata-rata lebih rendah dari 5%.
- Paralelisme dibatasi karena pekerjaan yang tidak dapat diparalelkan, seperti data yang tidak dapat dibagi akibat file yang dikompresi atau modul I/O yang tidak terpecah.
- Tingkat paralelisme bersifat tetap, misalnya saat menulis ke file yang ada di Cloud Storage.
Untuk menetapkan batas atas jumlah pekerja, tetapkan
opsi pipeline --maxNumWorkers
.
Nilai defaultnya adalah 2,000
.
Untuk menetapkan batas bawah jumlah pekerja, tetapkan
opsi layanan --min_num_workers
.
Tanda ini bersifat opsional.
Penskalaan otomatis streaming
Untuk tugas streaming, Penskalaan Otomatis Horizontal memungkinkan Dataflow mengubah jumlah pekerja secara adaptif sebagai respons terhadap perubahan beban dan penggunaan resource.
Penskalaan Otomatis Horizontal diaktifkan secara default untuk tugas streaming yang menggunakan Streaming Engine. Untuk mengaktifkan Penskalaan Otomatis Horizontal untuk tugas streaming yang tidak menggunakan Streaming Engine, tetapkan opsi pipeline berikut saat Anda memulai pipeline:
Java
--autoscalingAlgorithm=THROUGHPUT_BASED
--maxNumWorkers=MAX_WORKERS
Ganti MAX_WORKERS dengan jumlah maksimum instance pekerja.
Python
--autoscaling_algorithm=THROUGHPUT_BASED
--max_num_workers=MAX_WORKERS
Ganti MAX_WORKERS dengan jumlah maksimum instance pekerja.
Go
--autoscaling_algorithm=THROUGHPUT_BASED
--max_num_workers=MAX_WORKERS
Ganti MAX_WORKERS dengan jumlah maksimum instance pekerja.
Untuk menetapkan batas bawah jumlah pekerja, tetapkan
opsi layanan --min_num_workers
.
Saat Anda menetapkan nilai ini, penskalaan otomatis horizontal tidak akan diskalakan di bawah jumlah pekerja yang ditentukan. Flag ini bersifat opsional.
Menonaktifkan Penskalaan Otomatis Horizontal
Untuk menonaktifkan Penskalaan Otomatis Horizontal, tetapkan opsi pipeline berikut saat Anda menjalankan tugas.
Java
--autoscalingAlgorithm=NONE
Jika Anda menonaktifkan Penskalaan Otomatis Horizontal, Dataflow akan menetapkan
jumlah pekerja berdasarkan opsi --numWorkers
.
Python
--autoscaling_algorithm=NONE
Jika Anda menonaktifkan Penskalaan Otomatis Horizontal, Dataflow akan menetapkan
jumlah pekerja berdasarkan opsi --num_workers
.
Go
--autoscaling_algorithm=NONE
Jika Anda menonaktifkan Penskalaan Otomatis Horizontal, Dataflow akan menetapkan
jumlah pekerja berdasarkan opsi --num_workers
.
Sumber kustom
Jika membuat sumber data kustom, Anda berpotensi meningkatkan performa dengan menerapkan metode yang memberikan lebih banyak informasi ke algoritma Penskalaan Otomatis Horizontal:
Java
Sumber terbatas
- Dalam subclass
BoundedSource
, terapkan metodegetEstimatedSizeBytes
. Layanan Dataflow menggunakangetEstimatedSizeBytes
saat menghitung jumlah awal pekerja yang akan digunakan untuk pipeline Anda. - Dalam subclass
BoundedReader
, terapkan metodegetFractionConsumed
. Layanan Dataflow menggunakangetFractionConsumed
untuk melacak progres baca dan menyatukan jumlah pekerja yang benar untuk digunakan selama pembacaan.
Sumber yang tidak terbatas
Sumber harus memberi tahu layanan Dataflow tentang backlog.
Backlog adalah estimasi input dalam byte yang belum diproses oleh sumber. Untuk memberi tahu layanan tentang backlog, terapkan salah satu
metode berikut di class UnboundedReader
Anda.
getSplitBacklogBytes()
- Backlog untuk pemisahan sumber saat ini. Layanan menggabungkan backlog di semua bagian.getTotalBacklogBytes()
- Backlog global di semua bagian. Dalam beberapa kasus, backlog tidak tersedia untuk setiap bagian dan hanya dapat dihitung di semua bagian. Hanya bagian pertama (ID bagian '0') yang perlu memberikan total backlog.
Repositori Apache Beam berisi beberapa
contoh
sumber kustom yang mengimplementasikan class UnboundedReader
.
Python
Sumber terbatas
- Dalam subclass
BoundedSource
, terapkan metodeestimate_size
. Layanan Dataflow menggunakanestimate_size
saat menghitung jumlah awal pekerja yang akan digunakan untuk pipeline Anda. - Dalam subclass
RangeTracker
, terapkan metodefraction_consumed
. Layanan Dataflow menggunakanfraction_consumed
untuk melacak progres baca dan menyatukan jumlah pekerja yang benar untuk digunakan selama pembacaan.
Go
Sumber terbatas
- Di
RangeTracker
, implementasikan metodeGetProgress()
. Layanan Dataflow menggunakanGetProgress
untuk melacak progres pembacaan dan berkonvergensi pada jumlah pekerja yang benar untuk digunakan selama pembacaan.
Batasan
- Dalam tugas yang menjalankan Dataflow Prime, Penskalaan Otomatis Horizontal dinonaktifkan selama dan hingga 10 menit setelah Penskalaan Otomatis Vertikal. Untuk informasi selengkapnya, lihat Pengaruh pada Penskalaan Otomatis Horizontal.
- Untuk pipeline yang tidak menggunakan Dataflow Shuffle, Dataflow mungkin tidak dapat menskalakan pekerja secara efektif karena pekerja mungkin telah mengacak data yang disimpan di disk lokal.
- Transformasi
PeriodicImpulse
didukung dengan penskalaan otomatis streaming di Apache Beam SDK versi 2.60.0 dan yang lebih baru. Jika pipeline Anda menggunakan
PeriodicImpulse
dengan versi SDK sebelumnya, pekerja Dataflow tidak akan diskalakan ke bawah seperti yang diharapkan.
Langkah selanjutnya
- Menyesuaikan Penskalaan Otomatis Horizontal untuk pipeline streaming
- Memantau penskalaan otomatis Dataflow
- Memecahkan masalah penskalaan otomatis Dataflow