Halaman ini menunjukkan cara menyelesaikan masalah terkait fitur penskalaan otomatis Dataflow dan memberikan informasi tentang cara mengelola penskalaan otomatis.
Tugas tidak meningkatkan atau menurunkan skala
Bagian ini memberikan informasi tentang skenario yang mungkin mencegah worker melakukan penskalaan naik atau turun.
Tugas streaming tidak melakukan peningkatan skala
Saat pipeline streaming Anda memiliki backlog, worker tidak akan melakukan penskalaan.
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 meningkatkan skala, karena pekerjaan 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
Tugas batch atau streaming Anda berjalan seperti yang diharapkan, tetapi saat diperlukan lebih banyak worker, tugas tersebut tidak diskalakan.
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 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 metodegetProgress()sumber kustom Anda 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 sementara Penskalaan Otomatis Horizontal. Untuk mengetahui informasi selengkapnya, lihat Efek pada Penskalaan Otomatis Horizontal.
- Jika Anda menggunakan operasi
mapdi pipeline Python dan tugas Anda tidak melakukan penskalaan, Anda mungkin perlu menambahkan transformasiReshuffleke kode pipeline Anda. Untuk mengetahui informasi selengkapnya, lihat Reshuffle dalam dokumentasi Apache Beam.
Tugas streaming tidak memperkecil skala
Jika tugas streaming Anda memiliki backlog rendah dan pemakaian CPU rendah, worker tidak akan memperkecil skala. Masalah ini dapat terjadi karena berbagai alasan.
Jika tugas tidak menggunakan Streaming Engine, Dataflow akan menyeimbangkan jumlah persistent disk di antara worker. Oleh karena itu, setiap worker harus memiliki jumlah persistent disk yang sama. Misalnya, jika ada 100 disk dan 100 worker, setiap worker memiliki satu disk. Saat tugas diperkecil skalanya, tugas dapat memiliki 50 worker dengan dua persistent disk per worker. Tugas tidak akan diperkecil skalanya 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 penurunan skala didasarkan pada target pemakaian CPU sebesar 75%. Jika pemanfaatan CPU ini tidak dapat dicapai, penurunan skala akan dinonaktifkan.
Estimasi waktu backlog harus tetap di bawah sepuluh detik selama setidaknya dua menit sebelum worker memperkecil skala. Fluktuasi waktu backlog dapat menonaktifkan perkecil skala. Selain itu, throughput yang rendah dapat memengaruhi 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 memperkecil skala seperti yang diharapkan.
Peningkatan skala berhenti
Tugas batch atau streaming Anda mulai melakukan penskalaan, tetapi worker berhenti melakukan penskalaan 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 berada pada batas kuota Compute Engine-nya. 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 berada pada 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 ditingkatkan, jumlah alamat IP eksternal juga akan meningkat. Saat Anda mencapai batas alamat IP, worker akan berhenti melakukan penskalaan.
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 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, 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 |
|
|
| Peningkatan skala |
|
|
| Perkecil skala |
|
Untuk mengetahui informasi selengkapnya, lihat Heuristik penskalaan otomatis streaming.
Memecahkan masalah jadwal penskalaan otomatis
Jika Anda mengalami masalah saat membuat, memperbarui, atau menjalankan jadwal penskalaan otomatis, tinjau skenario umum dan langkah-langkah pemecahan masalah berikut.
Tidak dapat menetapkan atau memperbarui jadwal penskalaan otomatis
Jika upaya untuk membuat atau memperbarui jadwal penskalaan otomatis gagal, pastikan konfigurasi jadwal Anda mematuhi batasan berikut:
- Batas jadwal: Satu tugas dapat memiliki maksimum 10 jadwal penskalaan otomatis. Untuk menambahkan jadwal baru saat tugas sudah memiliki 10 jadwal, Anda harus menghapus jadwal yang ada terlebih dahulu.
- Durasi minimum: Durasi jadwal harus minimal 5 menit (300 detik).
- Batasan parameter:
- Target penggunaan CPU harus berada dalam rentang [0,1, 0,9].
- Jumlah worker maksimum harus lebih besar dari atau sama dengan jumlah worker minimum (
max_workers≥min_workers).
- Batasan format crontab saat memulai tugas: Ekspresi crontab yang ditentukan saat
peluncuran tugas menggunakan opsi pipeline
--experiments=autoscaling_schedule=...tidak boleh berisi koma (seperti1,15 * * * *atau* * * * MON,WED,FRI). Koma dicadangkan untuk membatasi opsi pipeline. Jika jadwal Anda memerlukan koma, luncurkan tugas tanpa jadwal dan konfigurasikan setelah peluncuran menggunakan update dalam proses, atau tentukan beberapa jadwal terpisah.
Jadwal tidak diterapkan atau jadwal lain diterapkan
Jika jadwal penskalaan otomatis tidak diterapkan selama periode yang diharapkan, atau jika setelan jadwal yang berbeda diterapkan, tinjau hal berikut:
- Hanya satu jadwal yang aktif dalam satu waktu: Jika dua jadwal atau lebih memiliki
periode waktu yang tumpang-tindih, Dataflow akan menentukan jadwal mana yang akan
diterapkan berdasarkan prioritas jadwal:
- Jadwal dengan nilai prioritas yang lebih tinggi (
priority) akan diterapkan. - Jika beberapa jadwal aktif memiliki nilai prioritas yang sama, jadwal yang paling baru diperbarui atau diubah akan diterapkan.
- Saat durasi jadwal aktif berakhir, Dataflow akan menerapkan jadwal lain yang masih aktif, atau mengembalikan perilaku penskalaan otomatis ke setelan default tugas.
- Jadwal dengan nilai prioritas yang lebih tinggi (
- Perbedaan zona waktu: Pastikan zona waktu yang ditentukan untuk jadwal Anda sesuai dengan wilayah yang diinginkan dan aturan waktu musim panas. Secara default, waktu mulai jadwal ditafsirkan dalam
UTC. - Verifikasi jadwal aktif di konsol: Di konsol Google Cloud , buka tab Autoscaling di halaman detail tugas Dataflow untuk melihat jadwal yang aktif.
Anda juga dapat memeriksa jadwal yang dikonfigurasi dan parameternya dengan menjalankan perintah
gcloud dataflow jobs describeatau dengan membuat kueri REST API.
Pipeline tidak melakukan penskalaan hingga jumlah worker yang dijadwalkan
Jika jadwal diaktifkan dengan batas worker yang lebih tinggi atau petunjuk pemakaian yang lebih rendah, tetapi pipeline tidak meningkatkan skala ke jumlah worker yang diharapkan, periksa faktor-faktor berikut:
- Batas resource dan kuota: Peningkatan skala memerlukan kuota resource yang cukup di project dan region Google Cloud Anda. Alokasi worker mungkin dicegah oleh:
- Kuota instance Compute Engine: Project Anda mungkin mencapai batas instance untuk region tersebut.
- Kuota CPU: Jika worker Anda menggunakan beberapa CPU (misalnya,
n1-standard-4), pastikan project Anda memiliki kuota CPU yang memadai. - Kuota alamat IP: Setiap worker VM memerlukan alamat IP. Jika kuota alamat IP di jaringan atau region VPC Anda habis, worker baru tidak dapat disediakan.
- Ketersediaan resource: Jika region atau zona mengalami kehabisan resource sementara, Dataflow mungkin tidak dapat membuat worker instance baru meskipun kuota tersedia. Untuk mengetahui informasi selengkapnya, lihat Pemberhentian peningkatan skala.
Sensitivitas tingkat latensi: Jika jadwal aktif mengonfigurasi tingkat latensi
medium_latencyatauhigh_latency, Dataflow sengaja menunggu lebih banyak backlog terakumulasi sebelum memicu peristiwa peningkatan skala:low_latency(default): meningkatkan skala saat backlog melebihi 15 detik.medium_latency: meningkatkan skala saat backlog melebihi 180 detik (3 menit).high_latency: meningkatkan skala saat backlog melebihi 600 detik (10 menit).
Jika tugas Anda tampaknya mengalami keterlambatan atau penundaan dalam peningkatan skala selama periode terjadwal, verifikasi apakah jadwal aktif mengonfigurasi tingkat latensi yang lebih tinggi.
Batas paralelisme berbasis kunci: Dataflow tidak dapat melakukan penskalaan melebihi jumlah kunci pemrosesan berbeda yang tersedia pada tahap tersebut. Jika aliran data Anda berisi beberapa kunci unik, penambahan worker tidak dapat meningkatkan throughput, dan Dataflow akan membatasi jumlah worker untuk menghindari resource nonaktif.
Stabilitas worker pool: Jika worker instance mengalami error atau error kehabisan memori (OOM), Dataflow akan menjeda sementara permintaan pengubahan ukuran penskalaan otomatis hingga worker pool stabil.
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 masalah pada penskalaan otomatis atau kondisi tugas streaming Anda.
CPU tidak didistribusikan secara merata
Saat tugas diskalakan otomatis, pemakaian CPU tidak didistribusikan secara merata di antara worker. Beberapa worker 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 worker, sehingga pekerjaan tidak dapat dibagi di antara worker.
Untuk mengetahui informasi selengkapnya, lihat panduan error hot key.
Item tugas yang meminta pembacaan status tidak lagi valid di backend
Selama komunikasi antara instance worker VM dan tugas Streaming Engine dalam 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 worker VM berkomunikasi dengan beberapa tugas Streaming Engine, dan setiap tugas melayani beberapa instance worker VM. Kunci item digunakan untuk mendistribusikan pekerjaan. Setiap tugas dan instance worker VM memiliki kumpulan rentang kunci, dan distribusi rentang ini dapat berubah secara dinamis. Misalnya, selama penskalaan otomatis, pengubahan ukuran tugas dapat menyebabkan distribusi rentang kunci berubah. 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 memadai
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 bahwa 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 status stabil, Anda dapat menetapkan --maxNumWorkers=15. Pipeline akan otomatis
diskalakan 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 berjumlah 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 worker. Alokasi ini berarti bahwa 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 status 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 berjumlah 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 worker. Alokasi ini berarti bahwa 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 status 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 berjumlah maksimal 1.000.
Jumlah maksimum worker yang mungkin digunakan 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.
Membatasi penskalaan otomatis untuk mengurangi dampak pada penagihan
Jika tidak ingin penskalaan otomatis meningkatkan tagihan, Anda dapat membatasi jumlah maksimum worker 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 pada 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 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 memilih ikut serta secara eksplisit karena fitur ini tidak aktif secara default.