Penskalaan Otomatis Horizontal

Penskalaan Otomatis Horizontal memungkinkan Dataflow memilih jumlah instance worker yang sesuai untuk tugas Anda, dengan menambahkan atau menghapus worker sesuai kebutuhan. Dataflow melakukan penskalaan berdasarkan penggunaan CPU rata-rata worker dan paralelisme pipeline. Paralelisme pipeline adalah perkiraan jumlah thread yang diperlukan untuk memproses data dengan cara yang 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 otomatis memilih jumlah worker berdasarkan estimasi total jumlah tugas di setiap tahap pipeline Anda. Estimasi ini bergantung pada ukuran input dan throughput saat ini. Setiap 30 detik, Dataflow mengevaluasi ulang jumlah tugas sesuai dengan progres eksekusi. Saat perkiraan jumlah total tugas meningkat atau menurun, Dataflow akan menskalakan jumlah worker secara dinamis.

Jumlah worker bersifat sublinear terhadap jumlah tugas. Misalnya, tugas dengan beban dua kali lipat memiliki worker kurang dari dua kali lipat.

Jika salah satu kondisi berikut terjadi, Dataflow akan mempertahankan atau mengurangi jumlah worker, untuk menghemat resource nonaktif:

  • Penggunaan CPU worker rata-rata 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 bersifat tetap, misalnya saat menulis ke file yang ada di Cloud Storage.

Untuk menetapkan batas atas jumlah worker, tetapkan opsi pipeline --maxNumWorkers. Nilai defaultnya adalah 2,000. Untuk menetapkan batas bawah pada jumlah worker, tetapkan opsi layanan --dataflow-service-options=min_num_workers. Flag ini bersifat opsional.

Penskalaan otomatis streaming

Untuk tugas streaming, Penskalaan Otomatis Horizontal memungkinkan Dataflow mengubah jumlah worker 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 worker instance.

Python

--autoscaling_algorithm=THROUGHPUT_BASED
--max_num_workers=MAX_WORKERS

Ganti MAX_WORKERS dengan jumlah maksimum worker instance.

Go

--autoscaling_algorithm=THROUGHPUT_BASED
--max_num_workers=MAX_WORKERS

Ganti MAX_WORKERS dengan jumlah maksimum worker instance.

Untuk menetapkan batas bawah pada jumlah worker, tetapkan opsi layanan --dataflow-service-options=min_num_workers. Saat Anda menetapkan nilai ini, penskalaan otomatis horizontal tidak akan menskalakan di bawah jumlah worker yang ditentukan. Flag ini bersifat opsional.

Saat tugas streaming berjalan, Anda dapat memperbarui worker minimum dan maksimum menggunakan pembaruan tugas saat beroperasi. Untuk menyesuaikan setelan, tetapkan min-num-workers dan flag 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 worker berdasarkan opsi --numWorkers.

Python

--autoscaling_algorithm=NONE

Jika Anda menonaktifkan Penskalaan Otomatis Horizontal, Dataflow akan menetapkan jumlah worker berdasarkan opsi --num_workers.

Go

--autoscaling_algorithm=NONE

Jika Anda menonaktifkan Penskalaan Otomatis Horizontal, Dataflow akan menetapkan jumlah worker 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 metode getEstimatedSizeBytes. Layanan Dataflow menggunakan getEstimatedSizeBytes saat menghitung jumlah awal worker yang akan digunakan untuk pipeline Anda.
  • Dalam subclass BoundedReader, terapkan metode getFractionConsumed. Layanan Dataflow menggunakan getFractionConsumed untuk melacak progres baca dan menyatukan jumlah worker 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 bagian sumber saat ini. Layanan menggabungkan backlog di semua pemisahan.
  • 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 menerapkan class UnboundedReader.

Python

Sumber yang dibatasi

  • Dalam subclass BoundedSource, terapkan metode estimate_size. Layanan Dataflow menggunakan estimate_size saat menghitung jumlah awal worker yang akan digunakan untuk pipeline Anda
  • Dalam subclass RangeTracker, terapkan metode fraction_consumed. Layanan Dataflow menggunakan fraction_consumed untuk melacak progres baca dan menyatukan jumlah worker yang tepat untuk digunakan selama pembacaan.

Go

Sumber yang dibatasi

  • Di RangeTracker, implementasikan metode GetProgress(). Layanan Dataflow menggunakan GetProgress untuk melacak progres baca dan menyatukan jumlah worker 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 Efek pada Penskalaan Otomatis Horizontal.
  • Untuk pipeline yang tidak menggunakan Dataflow Shuffle, Dataflow mungkin tidak dapat memperkecil skala 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, worker Dataflow tidak akan memperkecil skala seperti yang diharapkan.

Langkah berikutnya