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 ditingkatkan atau diturunkan skalanya

Bagian ini memberikan informasi tentang skenario yang dapat mencegah pekerja melakukan penskalaan ke atas atau ke bawah.

Tugas streaming tidak di-scale up

Saat pipeline streaming Anda memiliki backlog, pekerja tidak akan di-upscale.

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

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

Tugas batch dan streaming tidak di-scale up

Tugas batch atau streaming Anda berjalan seperti yang diharapkan, tetapi saat lebih banyak pekerja diperlukan, tugas tidak di-scale up.

Masalah ini mungkin terjadi karena salah satu alasan berikut:

  • File sementara atau penyiapan tidak dapat diakses. Jika tugas Anda menggunakan bucket Cloud Storage, bucket tersebut mungkin memiliki konfigurasi siklus proses yang menghapus objek di bucket. Objek yang dihapus mencakup folder dan file sementara serta penyiapan. Untuk memverifikasi apakah file telah dihapus, periksa konfigurasi siklus proses untuk bucket. Jika folder atau file sementara atau penyiapan dihapus setelah tugas dimulai, paket yang diperlukan untuk membuat pekerja baru mungkin tidak ada. Untuk mengatasi masalah ini, buat ulang folder dan file di bucket.
  • Aturan firewall mencegah pekerja mengirim dan menerima traffic di port TCP yang diperlukan. Aturan firewall dapat mencegah worker dimulai. Worker Dataflow harus dapat mengirim dan menerima traffic pada port TCP 12345 dan 12346. Untuk mengetahui informasi selengkapnya, termasuk langkah-langkah untuk menyelesaikan masalah ini, lihat Aturan firewall untuk Dataflow.
  • Sumber kustom memiliki metode getProgress() yang menampilkan nilai NULL. Saat Anda menggunakan sumber kustom, metrik backlog mengandalkan nilai yang ditampilkan dari metode getProgress() sumber kustom Anda 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 Anda menggunakan operasi map dalam pipeline Python dan tugas Anda tidak menskalakan, Anda mungkin perlu menambahkan transformasi Reshuffle ke kode pipeline Anda. Untuk mengetahui informasi selengkapnya, lihat Pengacakan Ulang dalam dokumentasi Apache Beam.

Tugas streaming tidak diturunkan skalanya

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

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

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

  • Perkiraan waktu backlog harus tetap di bawah sepuluh detik selama minimal dua menit sebelum pekerja menurunkan skala. Fluktuasi waktu backlog dapat menonaktifkan penurunan skala. Selain itu, throughput rendah dapat memengaruhi perkiraan waktu.

  • PeriodicImpulse didukung di Apache Beam SDK versi 2.60.0 dan yang lebih baru. Jika pipeline Anda menggunakan PeriodicImpulse dengan Apache Beam SDK versi 2.59.0 dan yang lebih lama, pekerja Dataflow tidak akan di-scale down seperti yang diharapkan.

Meningkatkan skala perhentian

Penskalaan tugas batch atau streaming Anda dimulai, tetapi penskalaan worker berhenti meskipun backlog masih ada.

Masalah ini terjadi saat batas kuota tercapai.

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

Selain itu, jika region yang Anda pilih tidak memiliki resource, Anda tidak dapat membuat resource baru dengan jenis tersebut, meskipun Anda memiliki sisa kuota di region atau project Anda. 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 Kuota dan ketersediaan resource.

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

Petunjuk pemanfaatan pekerja tidak berpengaruh

Anda menetapkan petunjuk pemakaian pekerja tetapi perilaku penskalaan otomatis tidak berubah.

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

Petunjuk pemakaian hanyalah salah satu faktor yang memengaruhi penskalaan otomatis. Tabel berikut mencantumkan beberapa alasan mengapa autoscaler mungkin tidak menggunakan petunjuk secara aktif:

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

Untuk mengetahui informasi selengkapnya, lihat Heuristik penskalaan otomatis streaming.

Kesenjangan dalam metrik penskalaan otomatis

Ada jeda singkat dan sementara dalam metrik penskalaan otomatis.

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

CPU didistribusikan secara tidak merata

Saat tugas diskalakan otomatis, pemakaian CPU didistribusikan secara tidak 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 tombol pintas. Kunci panas adalah kunci dengan elemen yang cukup untuk memengaruhi performa pipeline secara negatif. Setiap kunci harus diproses oleh satu pekerja, sehingga pekerjaan tidak dapat dibagi di antara pekerja.

Untuk mengetahui informasi selengkapnya, lihat panduan error tombol pintas.

Item kerja yang meminta status baca tidak lagi valid di backend

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

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 melayani beberapa instance VM pekerja. Kunci item digunakan untuk mendistribusikan pekerjaan. Setiap instance VM tugas dan pekerja memiliki kumpulan rentang kunci, dan distribusi rentang ini dapat berubah secara dinamis. Misalnya, selama penskalaan otomatis, pengubahan ukuran tugas dapat menyebabkan perubahan distribusi rentang kunci. Error ini dapat terjadi saat rentang kunci berubah. Error ini sudah diperkirakan, dan kecuali jika Anda melihat korelasi antara pesan ini dan pipeline yang berperforma buruk, Anda dapat mengabaikannya.

Resource Streaming Engine tidak cukup

Jika Streaming Engine tidak dapat mengalokasikan jumlah minimum worker 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 worker yang lebih kecil. Lihat Menetapkan rentang penskalaan otomatis.

Rentang penskalaan untuk pipeline penskalaan otomatis streaming

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

Java

Untuk tugas penskalaan otomatis streaming yang tidak menggunakan Streaming Engine, layanan Dataflow mengalokasikan 1 hingga 15 Persistent Disk untuk 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 pekerja adalah 1.

Dataflow menyeimbangkan jumlah Persistent Disk di antara worker. Misalnya, jika pipeline Anda memerlukan tiga atau empat pekerja dalam kondisi stabil, Anda dapat menetapkan --maxNumWorkers=15. Pipeline ini diskalakan secara otomatis antara 1 dan 15 pekerja, menggunakan 1, 3, 5, atau 15 pekerja, yang masing-masing sesuai dengan 15, 5, 3, atau 1 Persistent Disk per pekerja.

--maxNumWorkers dapat berjumlah maksimal 1.000.

Python

Untuk tugas penskalaan otomatis streaming yang tidak menggunakan Streaming Engine, layanan Dataflow mengalokasikan 1 hingga 15 Persistent Disk untuk 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 pekerja adalah 1.

Dataflow menyeimbangkan jumlah Persistent Disk di antara worker. Misalnya, jika pipeline Anda memerlukan tiga atau empat pekerja dalam kondisi stabil, Anda dapat menetapkan --max_num_workers=15. Pipeline secara otomatis menskalakan antara 1 dan 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 worker.

--max_num_workers dapat berjumlah maksimal 1.000.

Go

Untuk tugas penskalaan otomatis streaming yang tidak menggunakan Streaming Engine, layanan Dataflow mengalokasikan 1 hingga 15 Persistent Disk untuk 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 pekerja adalah 1.

Dataflow menyeimbangkan jumlah Persistent Disk di antara worker. Misalnya, jika pipeline Anda memerlukan tiga atau empat pekerja dalam kondisi stabil, Anda dapat menetapkan --max_num_workers=15. Pipeline secara otomatis menskalakan antara 1 dan 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 worker.

--max_num_workers dapat berjumlah maksimal 1.000.

Jumlah maksimum pekerja yang dapat digunakan penskalaan otomatis streaming

Java

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

Python

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

Go

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

Membatasi penskalaan otomatis untuk mengurangi dampak pada penagihan

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

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 mengetahui informasi tentang cara mengubah rentang penskalaan pada pipeline streaming, lihat Menetapkan rentang penskalaan otomatis.

Menonaktifkan penskalaan otomatis pada pipeline streaming

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

Java

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

Python

Tetapkan --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 memilih ikut serta secara eksplisit karena fitur ini tidak aktif secara default.