Menggunakan Dataflow Insights

Anda dapat menggunakan Insight Dataflow untuk membantu mengoptimalkan performa tugas. Topik ini menunjukkan cara berinteraksi dengan Dataflow Insights menggunakan gcloud atau REST API. Anda juga dapat meninjau Insight di Konsol Dataflow. Untuk informasi selengkapnya tentang meninjau Insight di Konsol, lihat Rekomendasi.

Ringkasan

Insight Dataflow memberikan insight tentang cara meningkatkan performa tugas, mengurangi biaya, dan memecahkan masalah error. Insight Dataflow adalah bagian dari layanan Recommender dan tersedia melalui jenis google.dataflow.diagnostics.Insight.

Saat menggunakan Dataflow Insights, perlu diingat bahwa beberapa rekomendasi mungkin tidak relevan dengan kasus penggunaan Anda.

Sebelum memulai

Sebelum dapat mulai menggunakan Dataflow Insights, Anda harus menyelesaikan langkah-langkah berikut.

  1. Aktifkan Recommender API.
  2. Pastikan akun Anda memiliki izin berikut:

    • recommender.dataflowDiagnosticsInsights.get
    • recommender.dataflowDiagnosticsInsights.list
    • recommender.dataflowDiagnosticsInsights.update

    Anda dapat memberikan izin ini satu per satu, atau Anda dapat memberikan salah satu peran berikut:

    • roles/recommender.dataflowDiagnosticsViewer
    • roles/recommender.dataflowDiagnosticsAdmin
    • roles/dataflow.viewer
    • roles/dataflow.developer
    • roles/dataflow.admin

Meminta insight Dataflow

Anda dapat mencantumkan insight Dataflow seperti yang ditunjukkan di bawah. Untuk jenis interaksi insight lainnya, lihat panduan insight untuk Recommender API.

Mencantumkan insight Dataflow

Untuk mencantumkan semua insight Dataflow untuk project Anda di region tertentu, gunakan salah satu metode berikut:

gcloud

Anda dapat menggunakan perintah gcloud recommender insights list untuk melihat semua insight Dataflow untuk project Anda di region yang ditentukan.

Sebelum menjalankan perintah, ganti nilai berikut:

  • PROJECT_ID: ID project yang insight-nya ingin Anda lihat dalam daftar.
  • REGION: Region tempat tugas Dataflow Anda berjalan. Contoh: us-west1.
gcloud recommender insights list --insight-type=google.dataflow.diagnostics.Insight \
  --project=PROJECT_ID \
  --location=REGION

Outputnya mencantumkan semua insight Dataflow untuk project Anda di region yang ditentukan.

REST

Anda dapat menggunakan metode insights.list Recommender API untuk mencantumkan semua insight Dataflow untuk project Anda di region yang ditentukan.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: ID project yang insight-nya ingin Anda lihat dalam daftar.
  • REGION: Region tempat tugas Dataflow Anda berjalan. Contoh: us-west1.

Metode HTTP dan URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights

Untuk mengirim permintaan menggunakan curl (Linux, macOS, atau Cloud Shell), jalankan perintah berikut:

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights"

Mendapatkan satu insight Dataflow

Untuk mendapatkan informasi selengkapnya tentang satu insight, termasuk deskripsi, status, dan rekomendasi apa pun yang terkait dengan insight tersebut, gunakan salah satu metode berikut:

gcloud

Gunakan perintah gcloud recommender insights describe dengan ID insight Anda untuk melihat informasi tentang satu insight. Sebelum menjalankan perintah, ganti nilai berikut:

  • INSIGHT_ID: ID insight yang ingin Anda lihat.
  • PROJECT_ID: ID project yang insight-nya ingin Anda lihat dalam daftar.
  • REGION: Region tempat tugas Dataflow Anda berjalan. Contoh: us-west1.
gcloud recommender insights describe INSIGHT_ID \
  --insight-type=google.dataflow.diagnostics.Insight \
  --project=PROJECT_ID \
  --location=REGION

Output akan menampilkan insight secara mendetail.

REST

Metode insights.get Recommender API mendapatkan satu insight. Sebelum menggunakan data permintaan apa pun, lakukan penggantian berikut:

  • PROJECT_ID: ID project yang insight-nya ingin Anda lihat dalam daftar.
  • REGION: Region tempat tugas Dataflow Anda berjalan. Contoh: us-west1.
  • INSIGHT_ID: ID insight yang ingin Anda lihat.

Metode HTTP dan URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID

Untuk mengirim permintaan menggunakan curl (Linux, macOS, atau Cloud Shell), jalankan perintah berikut:

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID"

Menafsirkan insight Dataflow

Setelah mendapatkan insight, Anda dapat meninjau kontennya untuk memahami pola penggunaan resource yang disoroti. Selain atribut insight standar, Dataflow Insights menyediakan subjenis berikut:

  • AUTOSCALING_NOT_ENABLED: Penskalaan otomatis dapat diaktifkan. Tugas memiliki penggunaan CPU yang tinggi dan menggunakan jumlah pekerja maksimum yang ditetapkan. Mengaktifkan penskalaan otomatis dapat meningkatkan performa.
  • HIGH_FAN_OUT: Jeda fusi dapat disisipkan setelah satu atau beberapa transformasi untuk meningkatkan paralelisme.
  • MAX_NUM_WORKERS: Penskalaan otomatis: Jumlah pekerja maksimum dapat ditingkatkan. Tugas menggunakan penskalaan otomatis, memiliki penggunaan CPU yang tinggi, dan menggunakan jumlah pekerja maksimum yang ditetapkan. Meningkatkan jumlah maksimum pekerja dapat meningkatkan performa.
  • WORKER_OUT_OF_MEMORY: Beberapa pekerja untuk tugas gagal karena kehabisan memori, yang dapat memperlambat tugas atau menyebabkannya gagal.
  • PREBUILD_NOT_UTILIZED: Gunakan alur kerja pra-pembuatan image pekerja untuk meningkatkan waktu startup pekerja dan keandalan penskalaan otomatis.
  • ACTIVE_KEYS (Pratinjau): Jumlah total kunci aktif kurang dari jumlah total core dan penskalaan ke atas tidak akan membantu.
  • LONG_WORK_ITEM: Pekerjaan dalam tahap gabungan memerlukan waktu terlalu lama untuk diproses, yang menunjukkan operasi yang berjalan lambat atau macet.

Untuk mempelajari lebih lanjut cara mengurangi masalah yang diidentifikasi oleh Dataflow Insights, lihat Insight.

Dataflow Insights juga menyediakan kolom content khusus yang berisi subkolom dengan informasi dan metadata tambahan tentang insight. Bergantung pada kasus penggunaan Anda, subkolom content berikut mungkin berguna:

  • jobName: Nama tugas Dataflow.
  • description: Deskripsi insight dalam bahasa Inggris.
  • title: Judul insight dalam bahasa Inggris.

Insight

Fan-out tinggi terdeteksi

Saat Dataflow mendeteksi bahwa tugas memiliki satu atau beberapa transformasi dengan fan-out tinggi, pesan berikut akan muncul:

High fan-out detected

Pesan ini ditampilkan saat ParDo yang memiliki rasio jumlah elemen output-ke-input yang tinggi digabungkan dengan ParDo berikutnya. Dalam situasi ini, ParDo kedua berjalan secara berurutan dengan ParDo pertama, yang memaksa semua elemen output dari input tertentu ke pekerja yang sama dan mengurangi paralelisme serta memperlambat performa.

Untuk menyelesaikan masalah ini:

  • Masukkan GroupByKey dan batalkan pengelompokan setelah ParDo pertama Anda. Layanan Dataflow tidak pernah menggabungkan operasi ParDo di seluruh agregasi. Untuk informasi selengkapnya, lihat Pengoptimalan Fusion
  • Teruskan PCollection perantara sebagai input samping ke ParDo lain. Layanan Dataflow selalu mewujudkan input samping.
  • Sisipkan langkah Pengacakan Ulang. Pengurutan ulang mencegah penggabungan, memeriksa data, dan mengonfigurasi ulang strategi jendela sehingga tidak ada data yang dihapus. Pengurutan ulang didukung oleh Dataflow meskipun ditandai tidak digunakan lagi dalam dokumentasi Apache Beam (perhatikan bahwa pengurutan ulang data dapat meningkatkan biaya untuk menjalankan pipeline Anda).

Penskalaan otomatis: Jumlah maksimum pekerja dapat ditingkatkan

Saat Dataflow mendeteksi bahwa tugas menggunakan jumlah maksimum pekerja yang diizinkan, maxNumWorkers (atau max_num_workers), dan bahwa tugas tersebut mungkin menggunakan lebih banyak pekerja jika maksimum ini ditingkatkan, pesan berikut akan muncul:

maximum number of workers could be increased

Misalnya, rekomendasi ini terjadi untuk tugas batch atau streaming yang menetapkan maxNumWorkers ke 50 saat semua 50 pekerja digunakan dengan penggunaan CPU pekerja rata-rata di atas 80%. Rekomendasi ini juga terjadi untuk tugas streaming yang menetapkan maxNumWorkers ke 50 saat ke-50 pekerja digunakan dengan penggunaan CPU pekerja rata-rata di atas 50% dan tugas memiliki estimasi waktu pemrosesan lebih dari 2 menit.

Biasanya, meningkatkan maxNumWorkers akan meningkatkan throughput pipeline. Pipeline batch dapat diselesaikan dalam waktu lebih singkat, dan pipeline streaming dapat menangani lonjakan data yang lebih besar dan memproses lebih banyak elemen per detik. Namun, hal ini mungkin akan menimbulkan biaya yang lebih tinggi. Untuk mengetahui informasi selengkapnya, lihat Harga resource pekerja. Untuk mengetahui detail tentang cara kerja algoritma Penskalaan Otomatis dan cara mengonfigurasinya, lihat Panduan penskalaan otomatis.

Untuk menyelesaikan masalah ini:

  • Tingkatkan atau hapus opsi pipeline maxNumWorkers. Tanpa opsi ini, Dataflow akan menggunakan setelan default yang tercantum dalam Panduan penskalaan otomatis.
  • Tidak apa-apa jika Anda tidak melakukan apa pun jika performa pipeline memadai.
    • Untuk pipeline batch, pastikan total waktu berjalan memenuhi persyaratan Anda.
    • Untuk pipeline streaming, periksa grafik Keaktualan data di tab Metrik Tugas pada halaman tugas. Pastikan nilai dalam grafik tidak terus meningkat dan berada dalam batas yang dapat diterima.

Penskalaan otomatis: Menetapkan jumlah pekerja awal dapat meningkatkan performa tugas

Jika Dataflow mendeteksi bahwa tugas menggunakan sejumlah pekerja tertentu selama lebih dari 50% waktu berjalan, menetapkan jumlah pekerja awal ke nilai yang direkomendasikan dapat meningkatkan performa tugas dengan mengurangi waktu berjalan untuk tugas batch atau mencegah backlog bertambah saat memperbarui tugas streaming.

Pekerja gagal dengan error OutOfMemory

Saat Dataflow mendeteksi bahwa pekerja untuk tugas gagal karena error Kehabisan Memori, pesan berikut akan muncul:

Some workers are out of memory

Beberapa pekerja untuk tugas tersebut gagal karena kehabisan memori. Meskipun tugas dapat selesai, error ini juga dapat mencegah tugas berhasil diselesaikan atau memperlambat performa.

Coba saran berikut:

  • Meningkatkan jumlah memori yang tersedia untuk pekerja secara manual.
  • Kurangi jumlah memori yang diperlukan, dengan membuat profil penggunaan memori. Untuk mengetahui informasi selengkapnya, lihat Memecahkan masalah error Dataflow kehabisan memori.

Alur kerja pra-pembuatan tidak digunakan

Saat Dataflow mendeteksi pipeline yang alur kerja pra-pembuatan image pekerjanya tidak digunakan, pesan berikut akan muncul:

pre-build workflow not utilized

Jika alur kerja pra-pembuatan image pekerja tidak digunakan, pipeline memiliki dependensi yang diinstal berulang kali saat runtime. Konfigurasi ini memperlambat waktu startup pekerja, yang menurunkan throughput tugas dan menyebabkan perilaku penskalaan otomatis yang tidak dapat diandalkan.

Untuk mengatasi masalah ini, gunakan alur kerja pra-pembuatan image pekerja saat meluncurkan pipeline. Untuk informasi selengkapnya, lihat Dependensi Python pra-build.

Jika penampung yang telah dibuat sebelumnya dan disesuaikan sudah digunakan, untuk menghindari penginstalan yang tidak perlu, tambahkan opsi '--sdk_location=container', dan hapus opsi berikut:

  • '--setup_file'
  • '--requirements_file'
  • '--extra_package(s)'

Kunci aktif rendah

Saat Dataflow mendeteksi bahwa tugas tertinggal karena jumlah kunci aktif kurang dari jumlah total core dan penskalaan tidak akan membantu, pesan berikut akan muncul:

Active keys can be increased

Untuk menjalankan kode pengguna dalam tugas, Dataflow menggunakan pekerja. Setiap thread dipetakan ke kunci yang bertanggung jawab atas kumpulan data yang akan diproses dan kunci hanya dapat dijalankan di satu core pada satu waktu karena alasan ketepatan.

Dalam beberapa kasus, beberapa core bekerja terlalu keras sementara yang lain tidak ada aktivitas. Untuk mengatasi masalah ini, tingkatkan jumlah kunci, yang juga akan meningkatkan jumlah thread aktif.

Potensi solusi untuk meningkatkan kunci: - Anda dapat meningkatkan jumlah kunci dengan menggunakan jenis kunci yang lebih spesifik. Misalnya, jika jenis kunci adalah IP address, lebih sedikit kunci yang tersedia. Namun, jika Anda mengubah jenis kunci menjadi IP + [user identifier], lebih banyak kunci yang tersedia, sehingga meningkatkan paralelisme. - Untuk pipeline yang menulis ke BigQuery dengan sink yang berpotensi menjadi bottleneck, lihat artikel ini. - Untuk sumber/penampung lain, periksa apakah sumber/penampung tersebut memiliki parameter numShards dan tingkatkan. Secara umum, satu shard dipetakan ke satu kunci. - Untuk panduan umum selengkapnya tentang model eksekusi kami, lihat artikel ini. - Fanout dapat digunakan untuk mengambil satu kunci input dan menambahkan hash ke kunci tersebut untuk menghasilkan beberapa kunci output. Referensi

Tahap menghabiskan waktu terlalu lama untuk bekerja

Saat Dataflow mendeteksi bahwa pekerjaan sering kali memerlukan waktu terlalu lama untuk selesai diproses, pesan berikut akan muncul:

Stage spending too long on work

Dataflow mengirim tugas ke tahap gabungan dalam paket elemen yang akan diproses, dan setiap paket dianggap selesai setelah semua elemen dan outputnya telah diproses untuk tahap tersebut. Pipeline streaming dioptimalkan di sekitar paket pekerjaan yang memerlukan waktu kurang dari satu menit untuk diproses sepenuhnya, sehingga waktu pemrosesan yang lama dapat menyebabkan masalah performa lebih lanjut dalam pipeline.

Masalah ini dapat disebabkan oleh transformasi pengguna yang macet atau lambat. Transformasi ini dapat diidentifikasi dengan peringatan yang ditampilkan di Cloud Logging dan tab Diagnostics-nya, dengan frasa kunci "Operasi sedang berlangsung" atau "Pemrosesan macet". Untuk mendiagnosis apakah masalah ini disebabkan oleh transformasi pengguna, gunakan Cloud Profiler untuk memeriksa performa transformasi pengguna. Kemudian, lacak kode yang menyebabkan pelambatan dan seberapa seringnya. Untuk mengetahui informasi selengkapnya, lihat Memecahkan Masalah Error Dataflow Umum.

Jika penyelidikan mengungkapkan bahwa waktu pemrosesan yang lama tidak disebabkan oleh transformasi pengguna, sebaiknya hubungi Dukungan Cloud dan jelaskan langkah-langkah yang dilakukan untuk menyelidikinya.

Tugas macet di item tugas

Saat Dataflow mendeteksi bahwa kunci macet karena satu item pekerjaan berulang kali gagal, lalu dicoba lagi, pesan berikut akan muncul:

Job is stuck due to failed and retried work item

Di Dataflow, semua pesan dalam pipeline diproses berdasarkan kunci tertentu. Jika error terjadi saat memproses pesan, pesan tersebut akan dicoba lagi. Pesan dapat dicoba ulang dua atau tiga kali. Namun, jika error terjadi berulang kali, seperti sepuluh kali berturut-turut, hal ini biasanya menunjukkan masalah mendasar pada kode pipeline. Saat pesan tertentu pada kunci dicoba lagi, pesan lain di bawah kunci yang sama tidak dapat membuat progres. Jika pesan gagal 10 kali atau lebih, masalah tersebut kemungkinan tidak akan teratasi dengan sendirinya. Kegagalan pesan ini dapat menyebabkan masalah pipeline seperti:

  • menunda watermark
  • menumpuk backlog
  • mencegah operasi pembuangan selesai

Untuk men-debug masalah ini, selidiki tahap yang dilaporkan rekomendasi dan tinjau log untuk mengidentifikasi kode yang bermasalah. Kemudian, perbarui tugas dengan kode pipeline baru untuk mengatasi masalah tugas.

Streaming Engine tidak diaktifkan

Saat Dataflow mendeteksi bahwa tugas streaming tidak mengaktifkan Streaming Engine, pesan berikut akan muncul:

This job isn't using Streaming Engine. It might benefit from having Streaming Engine enabled.

Menggunakan Streaming Engine memiliki berbagai potensi manfaat, termasuk penskalaan otomatis horizontal yang lebih baik, peningkatan dukungan, dan pengurangan penggunaan resource penyimpanan CPU, memori, dan Persistent Disk di VM pekerja. Streaming Engine juga mendukung penagihan berbasis resource.