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 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 metode getProgress() sumber kustom Anda untuk mulai mengumpulkan data. Implementasi default untuk getProgress() menampilkan nilai NULL. Untuk mengatasi masalah ini, pastikan sumber kustom Anda mengganti metode getProgress() 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 map di pipeline Python dan tugas Anda tidak melakukan penskalaan, Anda mungkin perlu menambahkan transformasi Reshuffle ke 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 maxNumWorkers dibagi 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.

  • 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, 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
  • Anda telah mencapai jumlah minimum atau maksimum worker.
  • Jumlah worker dibatasi oleh jumlah kunci yang diproses secara paralel.
  • Tugas dibatasi oleh RPC eksternal.
  • Penyesuaian penurunan skala terlalu kecil atau Dataflow meredam penurunan skala. Untuk mengetahui informasi selengkapnya, lihat Heuristik penskalaan otomatis streaming.
Peningkatan skala
  • Backlog tinggi atau sasaran latensi 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 daripada jumlah worker saat ini.

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 (seperti 1,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.
  • 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 describe atau 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_latency atau high_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.