Penskalaan Otomatis Horizontal memungkinkan Dataflow memilih jumlah instance worker yang sesuai untuk tugas Anda, serta menambahkan atau menghapus pekerja sesuai kebutuhan. Dataflow melakukan penskalaan berdasarkan penggunaan CPU rata-rata oleh pekerja dan paralelisme pipeline. Paralelisme pipeline adalah perkiraan jumlah thread yang diperlukan untuk memproses data paling efisien pada waktu tertentu.
Penskalaan Otomatis Horizontal didukung dalam pipeline batch dan streaming.
Penskalaan otomatis batch
Penskalaan Otomatis Horizontal diaktifkan secara default pada semua pipeline batch. Dataflow secara otomatis memilih jumlah pekerja berdasarkan perkiraan total jumlah 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 berkurang, Dataflow akan meningkatkan atau menurunkan skala jumlah pekerja secara dinamis.
Jumlah pekerja bersifat sublinier terhadap jumlah pekerjaan. Misalnya, pekerjaan dengan dua kali pekerjaan memiliki pekerja yang kurang dari dua kali lipat.
Jika salah satu kondisi berikut terjadi, Dataflow akan mempertahankan atau mengurangi jumlah pekerja untuk menghemat resource yang tidak aktif:
- Penggunaan CPU rata-rata pekerja lebih rendah dari 5%.
- Paralelisme terbatas karena pekerjaan yang tidak tertandingi, seperti data yang tidak dapat dipisahkan yang disebabkan oleh file terkompresi atau modul I/O yang tidak terpisah.
- Tingkat paralelisme bersifat tetap, misalnya saat menulis ke file yang sudah ada di Cloud Storage.
Untuk menetapkan batas atas jumlah pekerja, tetapkan
opsi pipeline --maxNumWorkers
.
Tanda ini bersifat opsional untuk tugas batch. Nilai defaultnya adalah 1000
.
Penskalaan otomatis streaming
Untuk tugas streaming, Penskalaan Otomatis Horizontal memungkinkan Dataflow mengubah jumlah pekerja secara adaptasi sebagai respons terhadap perubahan beban dan pemanfaatan resource.
Penskalaan Otomatis Horizontal diaktifkan secara default untuk tugas streaming yang menggunakan Streaming Engine. Guna 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.
Nonaktifkan 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 informasi selengkapnya ke algoritma Penskalaan Otomatis Horizontal:
Java
Sumber dengan batas
- Di subclass
BoundedSource
, terapkan metodegetEstimatedSizeBytes
. Layanan Dataflow menggunakangetEstimatedSizeBytes
saat menghitung jumlah awal pekerja yang akan digunakan untuk pipeline Anda. - Di subclass
BoundedReader
, terapkan metodegetFractionConsumed
. Layanan Dataflow menggunakangetFractionConsumed
untuk melacak progres baca dan menyatu pada jumlah pekerja yang benar untuk digunakan selama pembacaan.
Sumber tak terbatas
Sumber harus memberi tahu layanan Dataflow tentang backlog.
Backlog adalah perkiraan 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 pemisahan dan hanya dapat dihitung pada semua pemisahan. Hanya bagian pertama (ID bagian '0') yang perlu memberikan total backlog.
Repositori Apache Beam berisi beberapa
contoh
sumber kustom yang menerapkan class UnboundedReader
.
Python
Sumber dengan batas
- Di subclass
BoundedSource
, terapkan metodeestimate_size
. Layanan Dataflow menggunakanestimate_size
saat menghitung jumlah awal pekerja yang akan digunakan untuk pipeline Anda. - Di subclass
RangeTracker
, terapkan metodefraction_consumed
. Layanan Dataflow menggunakanfraction_consumed
untuk melacak progres baca dan menyatu pada jumlah pekerja yang benar untuk digunakan selama pembacaan.
Go
Sumber dengan batas
- Dalam
RangeTracker
Anda, implementasikan metodeGetProgress()
. Layanan Dataflow menggunakanGetProgress
untuk melacak progres baca dan mengarahkan 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 mengetahui informasi selengkapnya, lihat Efek pada Penskalaan Otomatis Horizontal.
- Untuk pipeline yang tidak menggunakan Dataflow Shuffle, Dataflow mungkin tidak dapat memperkecil skala pekerja secara efektif karena pekerja mungkin telah mengacak data yang disimpan di disk lokal.
- Transformasi PeriodicImpulse tidak didukung dengan penskalaan otomatis streaming. Jika pipeline Anda menggunakan
PeriodicImpulse
, pekerja Dataflow tidak akan menurunkan skala seperti yang diharapkan.
Langkah selanjutnya
- Menyesuaikan Penskalaan Otomatis Horizontal untuk pipeline streaming
- Memantau penskalaan otomatis Dataflow
- Memecahkan masalah penskalaan otomatis Dataflow