Penskalaan thread dinamis

Penskalaan thread dinamis adalah bagian dari rangkaian fitur penskalaan vertikal Dataflow. Fitur ini melengkapi fitur penskalaan otomatis horizontal Dataflow dengan menyesuaikan jumlah tugas paralel, yang juga dikenal sebagai bundle, yang dijalankan oleh setiap pekerja Dataflow. Tujuannya adalah untuk meningkatkan efisiensi keseluruhan pipeline Dataflow Anda.

Saat menjalankan pipeline, pemrosesan Dataflow didistribusikan di beberapa virtual machine (VM) Compute Engine, yang juga dikenal sebagai pekerja. Thread adalah satu tugas yang dapat dieksekusi yang berjalan dalam proses yang lebih besar. Dataflow meluncurkan beberapa thread di setiap pekerja.

Dengan penskalaan thread dinamis yang diaktifkan, layanan Dataflow secara otomatis memilih jumlah thread yang sesuai untuk dijalankan di setiap pekerja Dataflow. Karena setiap thread menjalankan tugas, meningkatkan jumlah thread memungkinkan lebih banyak tugas berjalan secara paralel pada pekerja. Saat Anda menggunakan fitur ini dengan fitur penskalaan otomatis horizontal, total jumlah thread yang digunakan oleh pipeline tetap sama, tetapi lebih sedikit pekerja yang digunakan.

Penskalaan thread dinamis menggunakan algoritma untuk menentukan jumlah thread yang dibutuhkan setiap pekerja berdasarkan sinyal pemanfaatan resource yang dihasilkan selama eksekusi pipeline. Untuk mengetahui informasi selengkapnya, lihat bagian Cara kerjanya di halaman ini.

Manfaat

Penskalaan thread dinamis memiliki potensi manfaat berikut.

  • Memungkinkan pekerja Dataflow memproses data secara lebih efisien dengan meningkatkan penggunaan CPU dan memori per pekerja.
  • Meningkatkan pemrosesan paralel dengan menyesuaikan jumlah thread pekerja yang tersedia untuk menjalankan tugas secara paralel selama eksekusi pipeline.
  • Mengurangi jumlah pekerja yang diperlukan untuk memproses set data besar, yang dapat mengurangi biaya Anda.

Dukungan dan batasan

  • Penskalaan thread dinamis tersedia untuk pipeline yang menggunakan SDK Java, Python, dan Go.
  • Tugas Dataflow harus menggunakan Runner v2.
  • Hanya pipeline batch yang didukung.
  • Pipeline yang menggunakan CPU atau memori secara intensif mungkin tidak mendapatkan manfaat dari penskalaan thread dinamis.
  • Penskalaan thread dinamis tidak mengurangi waktu yang dibutuhkan tugas Dataflow untuk selesai.

Cara kerjanya

Penskalaan thread dinamis menggunakan prinsip penyesuaian otomatis untuk menskalakan jumlah thread secara dinamis ke atas atau ke bawah pada setiap pekerja di kumpulan pekerja Dataflow. Jumlah thread diskalakan secara independen di setiap pekerja. Setiap thread menjalankan tugas. Meningkatkan jumlah thread memungkinkan lebih banyak tugas dijalankan secara paralel di pekerja. Saat tugas selesai dan thread tidak lagi diperlukan, jumlah thread akan diturunkan. Algoritma menentukan jumlah thread yang dibutuhkan setiap pekerja.

Jumlah thread pada pekerja dapat ditingkatkan hingga maksimum dua thread per vCPU jika kedua kondisi berikut terpenuhi:

  • Penggunaan memori pada pekerja kurang dari 50%.
  • Penggunaan CPU pada pekerja kurang dari 65%.

Jumlah thread pada worker akan diperkecil hingga minimum satu thread per vCPU jika kondisi berikut terpenuhi:

  • Penggunaan memori pada pekerja lebih dari 70%.

Untuk melihat pemakaian memori dan CPU untuk tugas Anda, gunakan tab Metrik tugas di antarmuka web Dataflow.

Untuk memastikan bahwa rekomendasi valid, Dataflow menunggu penggunaan resource stabil sebelum mengirimkan rekomendasi ke pekerja. Misalnya, penggunaan memori dan CPU mungkin berada dalam rentang untuk penskalaan, tetapi karena penggunaan resource masih meningkat, Dataflow tidak mengirimkan rekomendasi. Setelah pemanfaatan resource stabil, Dataflow akan mengirimkan rekomendasi.

Jika terjadi error kehabisan memori (OOM), penskalaan thread akan otomatis dinonaktifkan, dan pipeline berjalan dengan satu thread per vCPU.

Mengaktifkan penskalaan thread dinamis

Untuk mengaktifkan penskalaan thread dinamis, gunakan opsi layanan Dataflow berikut.

Java

--dataflowServiceOptions=enable_dynamic_thread_scaling

Python

--dataflow_service_options=enable_dynamic_thread_scaling

Go

--dataflow_service_options=enable_dynamic_thread_scaling

Jika penskalaan thread dinamis diaktifkan, Anda juga dapat menetapkan jumlah pekerja awal dan maksimum yang tersedia untuk pipeline selama eksekusi. Untuk mengetahui informasi selengkapnya, lihat Opsi pipeline.

Memastikan penskalaan thread dinamis diaktifkan

Jika penskalaan thread dinamis diaktifkan, pesan berikut akan muncul di file log pekerja:

Enabling thread vertical scaling feature in worker.

Untuk melihat file log pekerja, di Logs Explorer, gunakan panel Kueri untuk memfilter log menurut Nama log. Gunakan nama log berikut dalam filter Anda:

projects/PROJECT_ID/logs/dataflow.googleapis.com%2Fharness

Anda dapat melihat jumlah thread yang direkomendasikan dalam file log pekerja. Pesan berikut menyertakan jumlah thread yang direkomendasikan:

worker_thread_scaling_report_response { recommended_thread_count: NUMBER }

Jika pemanfaatan resource tidak berada dalam rentang untuk penskalaan, nilai yang ditampilkan sama dengan jumlah vCPU pada pekerja.

Anda juga dapat menggunakan Google Cloud konsol untuk melihat apakah penskalaan thread dinamis diaktifkan. Jika diaktifkan, di panel Job info Dataflow, di baris dataflowServiceOptions pada bagian Pipeline options, enable_dynamic_thread_scaling akan ditampilkan.

Pemecahan masalah

Bagian ini memberikan petunjuk untuk memecahkan masalah umum terkait penskalaan thread dinamis.

Performa menurun dengan penskalaan thread dinamis yang diaktifkan

Meningkatkan jumlah thread dapat menyebabkan masalah performa dalam kasus berikut:

  • Jika beberapa proses mencoba menggunakan resource yang sama, satu proses dapat menggunakan resource tersebut, sementara proses lainnya harus menunggu. Situasi ini dikenal sebagai persaingan resource. Jika terjadi perebutan resource, performa pipeline mungkin menurun.
  • Saat terjadi error kurang memori, penskalaan thread dinamis akan dinonaktifkan. Dalam beberapa kasus, error kehabisan memori dapat menyebabkan pipeline gagal.

Verifikasi apakah jumlah thread telah meningkat. Untuk mengetahui informasi tentang cara memverifikasi jumlah thread yang direkomendasikan, lihat Memverifikasi bahwa penskalaan thread diaktifkan di halaman ini.

Jika penskalaan thread diaktifkan, untuk mengatasi masalah ini, saat Anda menjalankan pipeline, jangan sertakan opsi layanan penskalaan thread dinamis.

Pekerja terpadu … diaktifkan dan dinonaktifkan

Setelah Anda mengaktifkan penskalaan thread dinamis, tugas Anda mungkin gagal dengan error berikut:

The workflow could not be created. Causes: (ID): Unified worker misconfigured by user and was both enabled and disabled.

Error ini terjadi saat Runner v2 dinonaktifkan secara eksplisit.

Untuk mengatasi masalah ini, aktifkan Runner v2. Untuk mengetahui informasi selengkapnya, lihat bagian Aktifkan Dataflow Runner v2 di halaman "Menggunakan Dataflow Runner V2".

Mengupgrade SDK

Setelah Anda mengaktifkan penskalaan thread dinamis, tugas Anda mungkin gagal dengan error berikut:

Java

Dataflow Runner v2 requires the Apache Beam Java SDK version 2.29.0 or higher. Please upgrade your SDK and resubmit your job.

Python

Dataflow Runner v2 requires the Apache Beam SDK, version 2.21.0 or higher. Please upgrade your SDK and resubmit your job.

Error ini terjadi saat Runner v2 tidak dapat diaktifkan karena versi SDK tidak mendukungnya.

Untuk mengatasi masalah ini, gunakan versi SDK yang mendukung Runner v2.

Fitur penskalaan vertikal rangkaian pesan tidak dapat diaktifkan

Setelah Anda mengaktifkan penskalaan thread dinamis, tugas Anda mungkin gagal dengan error berikut:

The workflow could not be created. Causes: (ID): Thread vertical scaling feature can not be enabled while number_of_worker_harness_threads is specified.

Error ini terjadi saat pipeline secara eksplisit menetapkan jumlah thread per pekerja menggunakan numberOfWorkerHarnessThreads atau number_of_worker_harness_threads opsi pipeline.

Untuk mengatasi masalah ini, hapus opsi pipeline numberOfWorkerHarnessThreads atau number_of_worker_harness_threads dari pipeline Anda.