Penskalaan Horizontal Otomatis memungkinkan Dataflow memilih jumlah instance pekerja yang sesuai untuk tugas Anda, dengan menambahkan atau menghapus pekerja sesuai kebutuhan. Dataflow melakukan penskalaan berdasarkan penggunaan CPU rata-rata pekerja dan paralelisme pipeline. Paralelisme pipeline adalah perkiraan 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 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 perkiraan jumlah total pekerjaan meningkat atau menurun, Dataflow akan menskalakan jumlah worker secara dinamis.
Jumlah pekerja bersifat sublinear terhadap jumlah pekerjaan. Misalnya, tugas dengan dua kali lipat pekerjaan memiliki kurang dari dua kali lipat pekerja.
Jika salah satu kondisi berikut terjadi, Dataflow akan mempertahankan atau mengurangi jumlah pekerja, untuk menghemat resource yang tidak digunakan:
- Penggunaan CPU rata-rata worker lebih rendah dari 5%.
- Paralelisme terbatas karena pekerjaan yang tidak dapat diparalelkan, seperti data yang tidak dapat dibagi karena file terkompresi atau modul I/O yang tidak dibagi.
- Tingkat paralelisme ditetapkan, 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 pada jumlah pekerja, tetapkan
opsi layanan --dataflow-service-options=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 pada jumlah pekerja, tetapkan
opsi layanan --dataflow-service-options=min_num_workers
.
Saat Anda menetapkan nilai ini, penskalaan otomatis horizontal tidak akan menskalakan di bawah jumlah pekerja yang ditentukan. Flag ini bersifat opsional.
Saat tugas streaming berjalan, Anda dapat memperbarui pekerja minimum dan maksimum
menggunakan
pembaruan tugas saat berjalan.
Untuk menyesuaikan setelan, tetapkan tanda min-num-workers
dan max-num-workers
.
Untuk mengetahui informasi selengkapnya, lihat
Memperbarui rentang penskalaan otomatis.
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 yang dibatasi
- 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 tepat untuk digunakan selama pembacaan.
Sumber tidak 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 pemisahan.getTotalBacklogBytes()
- Backlog global di semua pemisahan. Dalam beberapa kasus, backlog tidak tersedia untuk setiap pemisahan dan hanya dapat dihitung di semua pemisahan. Hanya pemisahan pertama (ID pemisahan '0') yang perlu memberikan total backlog.
Repositori Apache Beam berisi beberapa contoh sumber kustom yang menerapkan class UnboundedReader
.
Python
Sumber yang dibatasi
- 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 tepat untuk digunakan selama pembacaan.
Go
Sumber yang dibatasi
- Di
RangeTracker
, implementasikan metodeGetProgress()
. Layanan Dataflow menggunakanGetProgress
untuk melacak progres baca dan menyatukan jumlah pekerja yang tepat 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 Pengaruh pada Penskalaan Otomatis Horizontal.
- Untuk pipeline yang tidak menggunakan Dataflow Shuffle, Dataflow mungkin tidak dapat menskalakan worker secara efektif karena worker 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 yang lebih lama, pekerja Dataflow tidak akan diskalakan ke bawah seperti yang diharapkan.
Langkah berikutnya
- Menyesuaikan Penskalaan Otomatis Horizontal untuk pipeline streaming
- Memantau penskalaan otomatis Dataflow
- Memecahkan masalah penskalaan otomatis Dataflow