Halaman ini menunjukkan cara menyelesaikan masalah terkait fitur penskalaan otomatis Dataflow dan memberikan informasi tentang cara mengelola penskalaan otomatis.
Tugas tidak melakukan penskalaan naik atau turun
Bagian ini memberikan informasi tentang skenario yang mungkin mencegah worker melakukan penskalaan naik atau turun.
Tugas streaming tidak melakukan penskalaan naik
Jika pipeline streaming Anda memiliki backlog, worker tidak akan melakukan penskalaan naik.
Masalah ini terjadi jika backlog berlangsung kurang dari beberapa menit atau jika paralelisme dibatasi.
Terkadang, backlog meningkat, tetapi paralelisme rendah. Dalam hal ini, Dataflow tidak melakukan penskalaan naik karena tugas tidak dapat didistribusikan ke lebih banyak worker, sehingga menambahkan lebih banyak worker tidak akan membantu pemrosesan. Untuk mengetahui informasi selengkapnya, lihat Penskalaan otomatis streaming.
Tugas batch dan streaming tidak melakukan penskalaan naik
Tugas batch atau streaming Anda berjalan seperti yang diharapkan, tetapi saat lebih banyak worker diperlukan, tugas tidak melakukan penskalaan naik.
Masalah ini mungkin terjadi karena salah satu alasan berikut:
- File staging atau sementara 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 staging serta sementara. Untuk memverifikasi apakah file telah dihapus, periksa konfigurasi siklus proses untuk bucket. Jika folder atau file staging atau sementara dihapus setelah tugas dimulai, paket yang diperlukan untuk membuat worker baru mungkin tidak ada. Untuk mengatasi masalah ini, buat ulang folder dan file di bucket.
- Aturan firewall mencegah worker mengirim dan menerima traffic di port TCP yang diperlukan. Aturan firewall mungkin mencegah worker dimulai. Worker Dataflow harus dapat mengirim dan menerima traffic di port TCP 12345 dan 12346. Untuk mengetahui informasi selengkapnya, termasuk langkah-langkah untuk mengatasi 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 metodegetProgress()sumber kustom untuk mulai mengumpulkan data. Implementasi default untukgetProgress()menampilkan nilai NULL. Untuk mengatasi masalah ini, pastikan sumber kustom Anda mengganti metodegetProgress()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
mapdi pipeline Python dan tugas Anda tidak melakukan penskalaan naik, Anda mungkin perlu menambahkan transformasiReshuffleke kode pipeline. Untuk mengetahui informasi selengkapnya, lihat Reshuffle dalam dokumentasi Apache Beam.
Tugas streaming tidak melakukan penskalaan turun
Jika tugas streaming Anda memiliki backlog rendah dan pemakaian CPU rendah, worker tidak akan melakukan penskalaan turun. Masalah ini dapat terjadi karena berbagai alasan.
Jika tugas tidak menggunakan Streaming Engine, Dataflow akan menyeimbangkan jumlah persistent disk di antara worker. Akibatnya, setiap worker harus memiliki jumlah persistent disk yang sama. Misalnya, jika ada 100 disk dan 100 worker, setiap worker memiliki satu disk. Saat tugas melakukan penskalaan turun, tugas dapat memiliki 50 worker dengan dua persistent disk per worker. Tugas tidak akan melakukan penskalaan turun lagi hingga dapat memiliki 25 worker dengan empat persistent disk per worker. Selain itu, jumlah minimum worker adalah nilai yang ditetapkan ke
maxNumWorkersdibagi 15. Untuk mengetahui informasi selengkapnya, lihat Rentang penskalaan untuk pipeline penskalaan otomatis streaming.Jika tugas menggunakan Streaming Engine, target penskalaan turun didasarkan pada target pemakaian CPU sebesar 75%. Jika pemakaian CPU ini tidak dapat dicapai, penskalaan turun akan dinonaktifkan.
Estimasi waktu backlog harus tetap di bawah sepuluh detik selama minimal dua menit sebelum worker melakukan penskalaan turun. Fluktuasi waktu backlog dapat menonaktifkan penskalaan turun. Selain itu, throughput rendah dapat memiringkan estimasi waktu.
PeriodicImpulsedidukung di Apache Beam SDK versi 2.60.0 dan yang lebih baru. Jika pipeline Anda menggunakanPeriodicImpulsedengan Apache Beam SDK versi 2.59.0 dan yang lebih lama, worker Dataflow tidak akan melakukan penskalaan turun seperti yang diharapkan.
Penskalaan naik berhenti
Tugas batch atau streaming Anda mulai melakukan penskalaan naik, tetapi worker berhenti melakukan penskalaan naik meskipun backlog tetap ada.
Masalah ini terjadi saat batas kuota tercapai.
- Kuota Compute Engine: Tugas Dataflow tunduk pada kuota Compute Engine project. Jika beberapa tugas berjalan, project mungkin mencapai batas kuota Compute Engine. Dalam hal ini, Dataflow tidak dapat meningkatkan jumlah worker.
- Kuota CPU: Tugas Dataflow juga tunduk pada kuota CPU project. Jika jenis worker menggunakan lebih dari satu CPU, project mungkin mencapai batas kuota CPU.
- Kuota alamat IP eksternal: Jika tugas Anda menggunakan alamat IP eksternal untuk berkomunikasi dengan resource, Anda memerlukan alamat IP eksternal sebanyak worker. Saat jumlah worker melakukan penskalaan naik, jumlah alamat IP eksternal juga akan meningkat. Saat Anda mencapai batas alamat IP, worker akan berhenti melakukan penskalaan naik.
Selain itu, jika region yang Anda pilih kehabisan resource, Anda tidak dapat membuat resource baru dari jenis tersebut, meskipun Anda memiliki kuota yang tersisa 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 peningkatan kuota atau jalankan tugas di region lain.
Petunjuk pemakaian worker tidak berpengaruh
Anda menetapkan petunjuk pemakaian worker, 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, diagram akan menampilkan CPU utilization hint (not actively used by autoscaler).
Petunjuk pemakaian hanya 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 akan diperiksa |
|---|---|---|
| Tidak ada perubahan |
|
|
| Penskalaan naik |
|
|
| Penskalaan turun |
|
Untuk mengetahui informasi selengkapnya, lihat Heuristik penskalaan otomatis streaming.
Celah dalam metrik penskalaan otomatis
Ada celah singkat dan sementara dalam metrik penskalaan otomatis.
Masalah ini dapat terjadi jika tugas backend dimulai ulang. Celah dalam metrik ini tidak menunjukkan masalah dengan penskalaan otomatis atau kesehatan tugas streaming Anda.
CPU didistribusikan secara tidak merata
Saat tugas melakukan penskalaan otomatis, pemakaian CPU didistribusikan secara tidak merata di antara worker. Beberapa worker memiliki pemakaian CPU, latensi sistem, atau kesegaran data yang lebih tinggi daripada yang lain.
Masalah ini dapat terjadi jika data Anda berisi kunci aktif. Kunci aktif adalah kunci dengan elemen yang cukup untuk memengaruhi performa pipeline secara negatif. Setiap kunci harus diproses oleh satu worker, sehingga tugas tidak dapat dibagi di antara worker.
Untuk mengetahui informasi selengkapnya, lihat panduan error kunci aktif.
Item kerja yang meminta pembacaan status tidak lagi valid di backend
Selama komunikasi antara instance VM worker dan tugas Streaming Engine di pipeline streaming, error berikut 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 worker berkomunikasi dengan beberapa tugas Streaming Engine, dan setiap tugas melayani beberapa instance VM worker. Kunci item digunakan untuk mendistribusikan tugas. Setiap tugas dan instance VM worker memiliki kumpulan rentang kunci, dan distribusi rentang ini dapat berubah secara dinamis. Misalnya, selama penskalaan otomatis, perubahan ukuran tugas dapat menyebabkan perubahan distribusi rentang kunci. Saat rentang kunci berubah, error ini dapat terjadi. Error ini diharapkan, 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 antara 1 hingga 15 Persistent Disk ke
setiap worker. Alokasi ini berarti jumlah minimum worker 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 worker. Misalnya, jika pipeline Anda memerlukan tiga atau empat worker dalam kondisi stabil, Anda dapat menetapkan --maxNumWorkers=15. Pipeline secara otomatis melakukan penskalaan antara 1 dan 15 worker, menggunakan 1, 3, 5, atau 15 worker, yang masing-masing sesuai dengan 15, 5, 3, atau 1 Persistent Disk per worker.
--maxNumWorkers dapat mencapai 1000.
Python
Untuk tugas penskalaan otomatis streaming yang tidak menggunakan
Streaming Engine, layanan
Dataflow mengalokasikan antara 1 hingga 15 Persistent Disk ke
setiap worker. Alokasi ini berarti jumlah minimum worker 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 worker. Misalnya, jika pipeline Anda memerlukan tiga atau empat worker dalam kondisi stabil, Anda dapat menetapkan --max_num_workers=15. Pipeline secara otomatis melakukan penskalaan 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 mencapai 1000.
Go
Untuk tugas penskalaan otomatis streaming yang tidak menggunakan
Streaming Engine, layanan
Dataflow mengalokasikan antara 1 hingga 15 Persistent Disk ke
setiap worker. Alokasi ini berarti jumlah minimum worker 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 worker. Misalnya, jika pipeline Anda memerlukan tiga atau empat worker dalam kondisi stabil, Anda dapat menetapkan --max_num_workers=15. Pipeline secara otomatis melakukan penskalaan 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 mencapai 1000.
Jumlah maksimum worker 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 worker 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 mengetahui informasi tentang cara mengubah rentang penskalaan di 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
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
Tetapkan --autoscaling_algorithm=NONE. Untuk mengetahui informasi selengkapnya, lihat
Menonaktifkan Penskalaan Otomatis Horizontal.
Menggunakan jumlah worker tetap
Untuk tugas streaming yang tidak menggunakan Streaming Engine, perilaku defaultnya adalah menggunakan jumlah worker tetap. Untuk menggunakan penskalaan otomatis streaming dengan pipeline ini, Anda harus memilihnya secara eksplisit karena tidak diaktifkan secara default.