Penskalaan Otomatis Horizontal

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 metode getEstimatedSizeBytes. Layanan Dataflow menggunakan getEstimatedSizeBytes saat menghitung jumlah awal pekerja yang akan digunakan untuk pipeline Anda.
  • Di subclass BoundedReader, terapkan metode getFractionConsumed. Layanan Dataflow menggunakan getFractionConsumed 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 metode estimate_size. Layanan Dataflow menggunakan estimate_size saat menghitung jumlah awal pekerja yang akan digunakan untuk pipeline Anda.
  • Di subclass RangeTracker, terapkan metode fraction_consumed. Layanan Dataflow menggunakan fraction_consumed untuk melacak progres baca dan menyatu pada jumlah pekerja yang benar untuk digunakan selama pembacaan.

Go

Sumber dengan batas

  • Dalam RangeTracker Anda, implementasikan metode GetProgress(). Layanan Dataflow menggunakan GetProgress 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