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 paket, yang dijalankan oleh setiap pekerja Dataflow. Tujuannya adalah meningkatkan keseluruhan efisiensi pipeline Dataflow Anda.
Saat Dataflow menjalankan pipeline, pemrosesan 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 akan 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 autoscaling horisontal, jumlah total thread yang digunakan oleh pipeline tetap sama, tetapi pekerja yang digunakan lebih sedikit.
Penskalaan thread dinamis menggunakan algoritma untuk menentukan jumlah thread yang diperlukan setiap pekerja berdasarkan sinyal penggunaan resource yang dihasilkan selama eksekusi pipeline. Untuk informasi selengkapnya, lihat bagian Cara kerjanya di halaman ini.
Manfaat
Penskalaan thread dinamis memiliki potensi manfaat berikut.
- Memungkinkan pekerja Dataflow memproses data dengan 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 mungkin 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 jumlah waktu yang diperlukan untuk menyelesaikan tugas Dataflow.
Cara kerjanya
Penskalaan thread dinamis menggunakan prinsip penyesuaian otomatis untuk menskalakan jumlah thread secara dinamis ke atas atau ke bawah di setiap pekerja dalam kumpulan pekerja Dataflow. Jumlah thread diskalakan secara independen di setiap pekerja. Setiap thread menjalankan tugas. Dengan meningkatkan jumlah thread, lebih banyak tugas dapat berjalan secara paralel pada pekerja. Saat tugas selesai dan thread tidak lagi diperlukan, jumlah thread akan diperkecil. Algoritma menentukan jumlah thread yang diperlukan setiap pekerja.
Jumlah thread pada pekerja diskalakan 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 pekerja diskalakan ke minimum satu thread per vCPU saat kondisi berikut terpenuhi:
- Penggunaan memori pada pekerja lebih dari 70%.
Untuk melihat penggunaan memori dan CPU untuk tugas Anda, gunakan tab Job metrics antarmuka web Dataflow.
Untuk memastikan rekomendasi valid, Dataflow menunggu penggunaan resource stabil sebelum mengirim 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 penggunaan resource stabil, Dataflow akan mengirimkan rekomendasi.
Jika error kehabisan memori (OOM) terjadi, penskalaan thread akan otomatis dinonaktifkan, dan pipeline akan 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.
Memverifikasi bahwa penskalaan thread dinamis diaktifkan
Saat 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 berdasarkan Nama log. Gunakan nama log berikut di 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 penggunaan resource tidak berada dalam rentang untuk penskalaan, nilai yang ditampilkan sama dengan jumlah vCPU pada pekerja.
Anda juga dapat menggunakan konsol Google Cloud untuk melihat apakah penskalaan thread dinamis diaktifkan. Jika diaktifkan, di panel Info tugas Dataflow,
di baris dataflowServiceOptions di
bagian Opsi pipeline, enable_dynamic_thread_scaling
akan ditampilkan.
Pemecahan masalah
Bagian ini memberikan petunjuk untuk memecahkan masalah umum terkait penskalaan thread dinamis.
Performa menurun saat penskalaan thread dinamis diaktifkan
Meningkatkan jumlah thread dapat menyebabkan masalah performa dalam kasus berikut:
- Saat beberapa proses mencoba menggunakan resource yang sama, satu proses dapat menggunakan resource tersebut sementara yang lain harus menunggu. Situasi ini dikenal sebagai persaingan resource. Saat terjadi perebutan resource, performa pipeline dapat menurun.
- Saat terjadi error kekurangan memori, penskalaan thread dinamis akan dinonaktifkan. Dalam beberapa kasus, error kehabisan memori dapat menyebabkan pipeline gagal.
Pastikan apakah jumlah thread telah meningkat. Untuk 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 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 Mengaktifkan Runner Dataflow v2 di halaman "Menggunakan Runner Dataflow 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 menetapkan jumlah thread per pekerja secara eksplisit menggunakan opsi pipeline numberOfWorkerHarnessThreads
atau number_of_worker_harness_threads
.
Untuk mengatasi masalah ini, hapus opsi pipeline numberOfWorkerHarnessThreads
atau
number_of_worker_harness_threads
dari pipeline Anda.