Memecahkan masalah penskalaan otomatis Dataflow

Halaman ini menunjukkan cara menyelesaikan masalah terkait fitur penskalaan otomatis Dataflow dan memberikan informasi tentang cara mengelola penskalaan otomatis.

Tugas tidak dapat meningkatkan atau menurunkan skala

Bagian ini memberikan informasi tentang skenario yang dapat mencegah pekerja menaikkan atau menurunkan skala.

Tugas streaming tidak meningkatkan skala

Saat pipeline streaming Anda memiliki backlog, pekerja tidak dapat meningkatkan skala.

Masalah ini terjadi saat backlog berlangsung kurang dari beberapa menit atau jika paralelisme terbatas.

Terkadang, backlog meningkat, tetapi paralelisme rendah. Dalam hal ini, Dataflow tidak meningkatkan skala karena tugas tidak dapat didistribusikan ke lebih banyak pekerja sehingga menambahkan lebih banyak pekerja tidak akan membantu pemrosesannya. Untuk mengetahui informasi selengkapnya, lihat Penskalaan otomatis streaming.

Tugas batch dan streaming tidak ditingkatkan skalanya

Tugas batch atau streaming Anda berjalan seperti yang diharapkan, tetapi saat lebih banyak pekerja dibutuhkan, tugas tidak akan ditingkatkan skalanya.

Masalah ini mungkin terjadi karena salah satu alasan berikut:

  • File staging atau temp tidak dapat diakses. Jika tugas Anda menggunakan bucket Cloud Storage, bucket mungkin memiliki konfigurasi siklus proses yang menghapus objek di dalam bucket. Objek yang dihapus termasuk folder dan file staging dan sementara. Untuk memastikan apakah file telah dihapus atau belum, periksa konfigurasi siklus proses untuk bucket. Jika folder atau file staging atau temp dihapus setelah tugas dimulai, paket yang diperlukan untuk membuat pekerja baru mungkin tidak ada. Untuk mengatasi masalah ini, buat ulang folder dan file di dalam bucket.
  • Aturan firewall mencegah pekerja mengirim dan menerima traffic di port TCP yang diperlukan. Aturan firewall mungkin mencegah pekerja memulai. Pekerja Dataflow harus dapat mengirim dan menerima traffic di port TCP 12345 dan 12346. Untuk mengetahui informasi selengkapnya, termasuk langkah-langkah untuk menyelesaikan masalah ini, baca bagian Aturan firewall untuk Dataflow.
  • Sumber kustom memiliki metode getProgress() yang menampilkan nilai NULL. Saat Anda menggunakan sumber kustom, metrik backlog bergantung pada nilai yang ditampilkan metode getProgress() sumber kustom untuk mulai mengumpulkan data. Implementasi default untuk getProgress() menampilkan nilai NULL. Untuk mengatasi masalah ini, pastikan sumber kustom Anda menggantikan metode getProgress() default untuk menampilkan nilai non-NULL.
  • Update yang dipicu oleh Penskalaan Otomatis Vertikal akan menonaktifkan Penskalaan Otomatis Horizontal untuk sementara. Untuk mengetahui informasi selengkapnya, lihat Efek pada Penskalaan Otomatis Horizontal.
  • Jika menggunakan operasi map di pipeline Python dan tugas tidak diskalakan, Anda mungkin perlu menambahkan transformasi Reshuffle ke kode pipeline. Untuk informasi selengkapnya, lihat Perombakan dalam dokumentasi Apache Beam.

Tugas streaming tidak memperkecil skala

Saat tugas streaming Anda memiliki backlog yang rendah dan pemakaian CPU yang rendah, pekerja tidak akan diturunkan skalanya. Masalah ini dapat terjadi karena berbagai alasan.

  • Jika tugas tidak menggunakan Streaming Engine, Dataflow akan menyeimbangkan jumlah persistent disk di antara para pekerja. Akibatnya, setiap pekerja harus memiliki jumlah persistent disk yang sama. Misalnya, jika ada 100 disk dan 100 pekerja, setiap pekerja memiliki satu disk. Saat skala tugas diturunkan, tugas dapat memiliki 50 pekerja dengan dua persistent disk per pekerja. Tugas tidak akan diturunkan skalanya lagi hingga dapat memiliki 25 pekerja dengan empat persistent disk per pekerja. Selain itu, jumlah minimum pekerja adalah nilai yang ditetapkan ke maxNumWorkers dibagi 15. Untuk mengetahui informasi selengkapnya, lihat Menskalakan rentang untuk pipeline penskalaan otomatis streaming.

  • Saat tugas menggunakan Streaming Engine, target penurunan skala akan didasarkan pada target pemakaian CPU sebesar 75%. Jika penggunaan CPU ini tidak dapat dicapai, downscaling akan dinonaktifkan.

  • Perkiraan waktu backlog harus tetap di bawah sepuluh detik setidaknya selama dua menit sebelum pekerja menurunkan skala. Fluktuasi waktu backlog dapat menonaktifkan penskalaan. Selain itu, throughput yang rendah dapat mendistorsi perkiraan waktu.

  • PeriodicImpulse didukung di Apache Beam SDK versi 2.60.0 dan yang lebih baru. Saat pipeline Anda menggunakan PeriodicImpulse dengan Apache Beam SDK versi 2.59.0 dan yang lebih lama, pekerja Dataflow tidak akan menurunkan skala seperti yang diharapkan.

Meningkatkan jumlah perhentian

Tugas batch atau streaming Anda mulai meningkatkan skala, tetapi pekerja berhenti meningkatkan skala meskipun backlog masih ada.

Masalah ini terjadi saat batas kuota tercapai.

  • Kuota Compute Engine: Tugas Dataflow bergantung pada kuota Compute Engine project. Jika beberapa tugas sedang berjalan, project mungkin akan mencapai batas kuota Compute Engine. Dalam hal ini, Dataflow tidak dapat meningkatkan jumlah pekerja.
  • Kuota CPU: Tugas Dataflow juga bergantung pada kuota CPU project. Jika jenis pekerja menggunakan lebih dari satu CPU, project mungkin berada di batas kuota CPU.
  • Kuota alamat IP eksternal: Jika tugas Anda menggunakan alamat IP eksternal untuk berkomunikasi dengan resource, Anda memerlukan alamat IP eksternal sebanyak pekerja. Saat jumlah pekerja meningkat, jumlah alamat IP eksternal juga akan meningkat. Saat Anda mencapai batas alamat IP, pekerja akan berhenti meningkatkan skala.

Selain itu, jika region yang dipilih kehabisan resource, Anda tidak dapat membuat resource baru dari jenis tersebut, meskipun Anda memiliki sisa kuota di region atau project. Misalnya, Anda mungkin masih memiliki kuota untuk membuat alamat IP eksternal di us-central1, tetapi region tersebut mungkin tidak memiliki alamat IP yang tersedia. Untuk mengetahui informasi selengkapnya, lihat Ketersediaan resource dan kuota.

Untuk mengatasi masalah ini, minta penambahan kuota atau jalankan tugas di region lain.

Petunjuk pemakaian pekerja tidak berpengaruh

Anda menetapkan petunjuk penggunaan pekerja, tetapi perilaku penskalaan otomatis tidak berubah.

Untuk memahami masalah ini, buka Diagram pemakaian CPU pekerja dan periksa apakah petunjuk pemakaian pekerja digunakan secara aktif. Jika petunjuk digunakan, diagram akan menunjukkan CPU utilization hint (actively used by autoscaler). Jika tidak, CPU utilization hint (not actively used by autoscaler) akan ditampilkan.

Petunjuk penggunaan hanya salah satu faktor yang memengaruhi penskalaan otomatis. Tabel berikut mencantumkan beberapa alasan autoscaler tidak menggunakan petunjuk secara aktif:

Perilaku penskalaan yang diamati Penyebab Metrik yang diperiksa
Tidak ada perubahan
  • Anda telah mencapai jumlah pekerja minimum atau maksimum.
  • Jumlah pekerja dibatasi oleh jumlah kunci yang diproses secara paralel.
  • Tugas dibatasi oleh RPC eksternal.
  • Penyesuaian downscaling terlalu kecil atau Dataflow mengurangi downscaling. Untuk mengetahui informasi selengkapnya, lihat Heuristik penskalaan otomatis streaming.
Peningkatan skala
  • Target latensi atau backlog yang tinggi menggantikan petunjuk.
  • Jumlah minimum pekerja telah diperbarui ke nilai yang lebih tinggi daripada jumlah pekerja saat ini.
Perkecil skala
  • Jumlah maksimum pekerja telah diperbarui ke nilai yang lebih rendah dari jumlah pekerja saat ini.

Untuk mengetahui informasi selengkapnya, lihat Heuristik penskalaan otomatis streaming.

Kesenjangan dalam metrik penskalaan otomatis

Terdapat kesenjangan sementara yang pendek dalam metrik penskalaan otomatis.

Masalah ini dapat terjadi jika tugas backend dimulai ulang. Kesenjangan dalam metrik ini tidak menunjukkan masalah pada penskalaan otomatis atau performa tugas streaming Anda.

CPU didistribusikan secara tidak merata

Jika tugas diskalakan ke penskalaan otomatis, penggunaan CPU tidak didistribusikan secara merata di antara pekerja. Beberapa pekerja memiliki pemakaian CPU, latensi sistem, atau keaktualan data yang lebih tinggi daripada yang lain.

Masalah ini dapat terjadi jika data Anda berisi hot key. Hot key adalah kunci dengan elemen yang cukup untuk berdampak negatif pada performa pipeline. Setiap kunci harus diproses oleh satu pekerja agar tugas tidak dapat dibagi antar-pekerja.

Untuk mengetahui informasi selengkapnya, lihat panduan error hot key.

Item pekerjaan yang meminta pembacaan status tidak lagi valid di backend

Selama komunikasi antara instance VM pekerja dan tugas Streaming Engine di pipeline streaming, error berikut akan terjadi:

The work item requesting state read is no longer valid on the backend.
The work has already completed or will be retried.
This is expected during autoscaling events.

Selama penskalaan otomatis, instance VM pekerja berkomunikasi dengan beberapa tugas Streaming Engine, dan setiap tugas menyalurkan beberapa instance VM pekerja. Kunci item digunakan untuk mendistribusikan tugas. Setiap instance VM pekerja dan tugas memiliki sekumpulan rentang kunci, dan distribusi rentang tersebut dapat berubah secara dinamis. Misalnya, selama penskalaan otomatis, perubahan ukuran tugas dapat menyebabkan distribusi rentang kunci berubah. Saat rentang kunci berubah, error ini dapat terjadi. Error ini sudah diperkirakan, dan jika Anda tidak melihat korelasi antara pesan ini dengan pipeline berperforma buruk, Anda dapat mengabaikannya.

Resource Streaming Engine tidak memadai

Jika Streaming Engine tidak dapat mengalokasikan jumlah minimum pekerja yang Anda minta, error berikut akan ditampilkan:

Streaming Engine does not currently have enough resources available to fulfill
the request.

Untuk mengatasi masalah ini, coba tetapkan jumlah minimum pekerja yang lebih kecil. Lihat bagian Menetapkan rentang penskalaan otomatis.

Rentang penskalaan untuk pipeline penskalaan otomatis streaming

Bagian ini menjelaskan detail tentang rentang penskalaan untuk pipeline penskalaan otomatis streaming.

Java

Untuk tugas penskalaan otomatis streaming yang tidak menggunakan Streaming Engine, layanan Dataflow mengalokasikan antara 1 hingga 15 Persistent Disk ke setiap pekerja. Alokasi ini berarti jumlah minimum pekerja yang digunakan untuk pipeline penskalaan otomatis streaming adalah N/15, dengan N adalah nilai --maxNumWorkers.

Untuk tugas penskalaan otomatis streaming yang menggunakan Streaming Engine, jumlah minimum worker adalah 1.

Dataflow menyeimbangkan jumlah Persistent Disk di antara pekerja. Misalnya, jika pipeline Anda memerlukan tiga atau empat worker dalam keadaan stabil, Anda dapat menetapkan --maxNumWorkers=15. Pipeline secara otomatis menskalakan antara 1 hingga 15 worker, menggunakan 1, 2, 3, 4, 5, 8, atau 15 worker, yang masing-masing sesuai dengan 15, 8, 5, 4, 3, 2, atau 1 Persistent Disk per pekerja.

--maxNumWorkers dapat berisi maksimal 1.000.

Python

Untuk tugas penskalaan otomatis streaming yang tidak menggunakan Streaming Engine, layanan Dataflow mengalokasikan antara 1 hingga 15 Persistent Disk ke setiap pekerja. Alokasi ini berarti jumlah minimum pekerja yang digunakan untuk pipeline penskalaan otomatis streaming adalah N/15, dengan N adalah nilai --max_num_workers.

Untuk tugas penskalaan otomatis streaming yang menggunakan Streaming Engine, jumlah minimum worker adalah 1.

Dataflow menyeimbangkan jumlah Persistent Disk di antara pekerja. Misalnya, jika pipeline Anda memerlukan tiga atau empat worker dalam keadaan stabil, Anda dapat menetapkan --max_num_workers=15. Pipeline secara otomatis menskalakan antara 1 hingga 15 worker, menggunakan 1, 2, 3, 4, 5, 8, atau 15 worker, yang masing-masing sesuai dengan 15, 8, 5, 4, 3, 2, atau 1 Persistent Disk per pekerja.

--max_num_workers dapat berisi maksimal 1.000.

Go

Untuk tugas penskalaan otomatis streaming yang tidak menggunakan Streaming Engine, layanan Dataflow mengalokasikan antara 1 hingga 15 Persistent Disk ke setiap pekerja. Alokasi ini berarti jumlah minimum pekerja yang digunakan untuk pipeline penskalaan otomatis streaming adalah N/15, dengan N adalah nilai --max_num_workers.

Untuk tugas penskalaan otomatis streaming yang menggunakan Streaming Engine, jumlah minimum worker adalah 1.

Dataflow menyeimbangkan jumlah Persistent Disk di antara pekerja. Misalnya, jika pipeline Anda memerlukan tiga atau empat worker dalam keadaan stabil, Anda dapat menetapkan --max_num_workers=15. Pipeline secara otomatis menskalakan antara 1 hingga 15 worker, menggunakan 1, 2, 3, 4, 5, 8, atau 15 worker, yang masing-masing sesuai dengan 15, 8, 5, 4, 3, 2, atau 1 Persistent Disk per pekerja.

--max_num_workers dapat berisi maksimal 1.000.

Jumlah maksimum worker yang dapat digunakan oleh penskalaan otomatis streaming

Java

Dataflow beroperasi dalam batas kuota jumlah instance Compute Engine project Anda atau maxNumWorkers, mana saja yang lebih rendah.

Python

Dataflow beroperasi dalam batas kuota jumlah instance Compute Engine project Anda atau max_num_workers, mana saja yang lebih rendah.

Go

Dataflow beroperasi dalam batas kuota jumlah instance Compute Engine project Anda atau max_num_workers, mana saja yang lebih rendah.

Batasi penskalaan otomatis untuk mengurangi dampaknya terhadap penagihan

Jika tidak ingin penskalaan otomatis meningkatkan tagihan, Anda dapat membatasi jumlah maksimum pekerja yang dapat digunakan tugas streaming Anda.

Java

Dengan menentukan --maxNumWorkers, Anda membatasi rentang penskalaan yang digunakan untuk memproses tugas Anda.

Python

Dengan menentukan --max_num_workers, Anda membatasi rentang penskalaan yang digunakan untuk memproses tugas Anda.

Go

Dengan menentukan --max_num_workers, Anda membatasi rentang penskalaan yang digunakan untuk memproses tugas Anda.

Mengubah rentang penskalaan

Untuk informasi tentang cara mengubah rentang penskalaan pada pipeline streaming, lihat Menetapkan rentang penskalaan otomatis.

Menonaktifkan penskalaan otomatis di pipeline streaming

Untuk menonaktifkan penskalaan otomatis di pipeline streaming, ikuti langkah-langkah berikut.

Java

Setel --autoscalingAlgorithm=NONE. Untuk mengetahui informasi selengkapnya, lihat Menonaktifkan Penskalaan Otomatis Horizontal.

Python

Setel --autoscaling_algorithm=NONE. Untuk mengetahui informasi selengkapnya, lihat Menonaktifkan Penskalaan Otomatis Horizontal.

Go

Setel --autoscaling_algorithm=NONE. Untuk mengetahui informasi selengkapnya, lihat Menonaktifkan Penskalaan Otomatis Horizontal.

Menggunakan jumlah pekerja tetap

Untuk tugas streaming yang tidak menggunakan Streaming Engine, perilaku defaultnya adalah menggunakan jumlah pekerja tetap. Untuk menggunakan penskalaan otomatis streaming dengan pipeline ini, Anda harus secara eksplisit memilih untuk menggunakannya karena opsi ini tidak aktif secara default.