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 pekerja meningkatkan atau menurunkan skala.
Tugas streaming tidak mengalami peningkatan skala
Saat pipeline streaming Anda memiliki backlog, pekerja tidak meningkatkan skala.
Masalah ini terjadi saat backlog berlangsung kurang dari beberapa menit atau saat pekerja menggunakan kurang dari 20% CPU mereka.
Terkadang, backlog meningkat tetapi pemakaian CPU rendah. Karena beberapa tugas tidak memerlukan pemakaian CPU yang tinggi, menambahkan pekerja tidak akan meningkatkan performa. Dalam kasus tersebut, skala Dataflow tidak meningkat. Untuk informasi selengkapnya, lihat Penskalaan otomatis streaming. Skenario ini dapat terjadi karena alasan berikut:
- Jalur pipanya intens di I/O.
- Pipeline menunggu panggilan RPC eksternal.
- Hot key menyebabkan pemakaian CPU pekerja yang tidak merata.
- Pipeline tidak memiliki cukup kunci.
Tugas batch dan streaming tidak ditingkatkan skalanya
Tugas batch atau streaming Anda berjalan seperti yang diharapkan, tetapi jika lebih banyak pekerja diperlukan, 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 mencakup file dan folder staging serta temp. Untuk memastikan apakah file telah dihapus, 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 bucket.
- Aturan firewall mencegah pekerja mengirim dan menerima traffic di port TCP yang diperlukan. Aturan firewall dapat mencegah pekerja memulai. Pekerja Dataflow harus dapat mengirim dan menerima traffic di TCP port 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 bergantung pada nilai yang ditampilkan 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 untuk sementara akan menonaktifkan Penskalaan Otomatis Horizontal. Untuk informasi selengkapnya, lihat Efek pada Penskalaan Otomatis Horizontal.
- Jika Anda menggunakan operasi
map
dalam pipeline Python dan tugas Anda tidak meningkatkan skala, Anda mungkin perlu menambahkan transformasiReshuffle
ke kode pipeline Anda. Untuk mengetahui informasi selengkapnya, lihat Reshuffle di dokumentasi Apache Beam.
Tugas streaming tidak diperkecil
Saat tugas streaming Anda memiliki backlog yang rendah dan penggunaan CPU yang rendah, pekerja tidak akan menurunkan skala. Masalah ini dapat terjadi karena berbagai alasan.
Jika tugas tidak menggunakan Streaming Engine, Dataflow akan menyeimbangkan jumlah persistent disk antar-pekerja. Oleh karena itu, 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 diperkecil 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 Rentang penskalaan untuk pipeline penskalaan otomatis streaming.Saat tugas menggunakan Streaming Engine, target penurunan skala didasarkan pada pemakaian CPU target sebesar 75%. Jika pemanfaatan CPU ini tidak dapat dicapai, downscaling akan dinonaktifkan.
Perkiraan waktu backlog harus tetap di bawah sepuluh detik selama setidaknya dua menit sebelum pekerja mengurangi skala. Fluktuasi waktu backlog dapat menonaktifkan penurunan skala. Selain itu, throughput yang rendah dapat mendistorsi perkiraan waktu.
Saat pipeline Anda menggunakan
PeriodicImpulse
, pekerja Dataflow tidak menurunkan skala seperti yang diharapkan. PenggunaanPeriodicImpulse
tidak didukung dengan penskalaan otomatis streaming.
Meningkatkan skala perhentian
Tugas batch atau streaming Anda mulai ditingkatkan, tetapi pekerja berhenti meningkatkan skala meskipun backlog masih ada.
Masalah ini terjadi saat batas kuota tercapai.
- Kuota Compute Engine: Tugas Dataflow tunduk pada kuota Compute Engine project. Jika ada beberapa tugas yang berjalan, project mungkin telah mencapai batas kuota Compute Engine. 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 telah 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 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 masih ada 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 lebih lanjut, lihat Kuota dan ketersediaan resource.
Untuk mengatasi masalah ini, minta penambahan kuota atau jalankan tugas di region lain.
Petunjuk penggunaan pekerja tidak berpengaruh
Anda menetapkan petunjuk penggunaan pekerja, tetapi perilaku penskalaan otomatis tidak berubah.
Untuk memahami masalah ini, buka
diagram penggunaan CPU Pekerja
dan periksa apakah petunjuk penggunaan pekerja 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 pemanfaatan hanyalah salah satu faktor yang memengaruhi penskalaan otomatis. Tabel berikut mencantumkan beberapa alasan penskala otomatis mungkin tidak menggunakan petunjuk secara aktif:
Perilaku penskalaan yang diamati | Penyebab | Metrik yang perlu diperiksa |
---|---|---|
Tidak ada perubahan |
|
|
Peningkatan skala |
|
|
Perkecil skala |
|
Untuk informasi selengkapnya, lihat Heuristik penskalaan otomatis streaming.
Kesenjangan dalam metrik penskalaan otomatis
Ada gap sementara yang singkat 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 terdistribusi secara merata
Saat tugas melakukan penskalaan otomatis, pemakaian CPU didistribusikan secara tidak merata di antara pekerja. Beberapa pekerja memiliki pemakaian CPU, latensi sistem, atau keaktualan data yang lebih tinggi daripada pekerja lainnya.
Masalah ini dapat terjadi jika data Anda berisi hot key. Hot key adalah kunci dengan elemen yang cukup untuk memberikan dampak negatif pada performa pipeline. Setiap kunci harus diproses oleh satu pekerja, sehingga pekerjaan 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 dalam 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 melayani beberapa instance VM pekerja. Kunci item digunakan untuk mendistribusikan karya. Setiap tugas dan instance VM pekerja memiliki kumpulan rentang kunci, dan distribusi rentang ini 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 wajar, dan Anda dapat mengabaikannya, kecuali jika Anda melihat korelasi antara pesan ini dan pipeline yang berperforma buruk.
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 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 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 worker adalah 1.
Dataflow menyeimbangkan jumlah Persistent Disk antar-pekerja. Misalnya, jika pipeline Anda membutuhkan tiga atau empat pekerja dalam keadaan stabil, Anda dapat menetapkan --maxNumWorkers=15
. Pipeline secara otomatis menskalakan antara 1 dan 15 pekerja, menggunakan 1, 2, 3, 4, 5, 8, atau 15 pekerja, 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 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 worker adalah 1.
Dataflow menyeimbangkan jumlah Persistent Disk antar-pekerja. Misalnya, jika pipeline Anda membutuhkan tiga atau empat pekerja dalam keadaan stabil, Anda dapat menetapkan --max_num_workers=15
. Pipeline secara otomatis menskalakan antara 1 dan 15 pekerja, menggunakan 1, 2, 3, 4, 5, 8, atau 15 pekerja, 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 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 worker adalah 1.
Dataflow menyeimbangkan jumlah Persistent Disk antar-pekerja. Misalnya, jika pipeline Anda membutuhkan tiga atau empat pekerja dalam keadaan stabil, Anda dapat menetapkan --max_num_workers=15
. Pipeline secara otomatis menskalakan antara 1 dan 15 pekerja, menggunakan 1, 2, 3, 4, 5, 8, atau 15 pekerja, 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 streaming yang mungkin digunakan penskalaan otomatis
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 dampak terhadap penagihan
Jika tidak ingin penskalaan otomatis menaikkan 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 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
Setel --autoscalingAlgorithm=NONE
. Untuk informasi selengkapnya, lihat
Menonaktifkan Penskalaan Otomatis Horizontal.
Python
Setel --autoscaling_algorithm=NONE
. Untuk informasi selengkapnya, lihat
Menonaktifkan Penskalaan Otomatis Horizontal.
Go
Setel --autoscaling_algorithm=NONE
. Untuk informasi selengkapnya, lihat
Menonaktifkan Penskalaan Otomatis Horizontal.
Menggunakan jumlah pekerja tetap
Untuk tugas streaming yang tidak menggunakan Streaming Engine, perilaku default-nya adalah menggunakan jumlah pekerja yang tetap. Untuk menggunakan penskalaan otomatis streaming dengan pipeline ini, Anda harus secara eksplisit memilih ikut serta karena tidak aktif secara default.