Menggunakan Dataflow Insights

Anda dapat menggunakan Dataflow Insights 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 mengetahui informasi selengkapnya tentang cara meninjau Insight di Konsol, lihat Rekomendasi.

Ringkasan

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

Saat Anda 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 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 ini. Untuk jenis interaksi insight lainnya, lihat panduan insight untuk Recommender API.

Membuat daftar 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 ingin Anda cantumkan insight-nya.
  • REGION: Region tempat tugas Dataflow Anda dijalankan. 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 data permintaan apa pun, buat pergantian berikut:

  • PROJECT_ID: ID project yang ingin Anda cantumkan insight-nya.
  • REGION: Region tempat tugas Dataflow Anda dijalankan. 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, gunakan salah satu metode berikut:

gcloud

Gunakan perintah gcloud recommendeder insights explain dengan ID insight 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 ingin Anda cantumkan insight-nya.
  • REGION: Region tempat tugas Dataflow Anda dijalankan. Contoh: us-west1.
gcloud recommender insights describe INSIGHT_ID \
  --insight-type=google.dataflow.diagnostics.Insight \
  --project=PROJECT_ID \
  --location=REGION

Output menampilkan insight secara mendetail.

REST

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

  • PROJECT_ID: ID project yang ingin Anda cantumkan insight-nya.
  • REGION: Region tempat tugas Dataflow Anda dijalankan. 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 ditandainya. Selain atribut insight standar, Dataflow Insights menyediakan subjenis berikut:

  • AUTOSCALING_NOT_ENABLED: Penskalaan otomatis dapat diaktifkan. Tugas ini memiliki penggunaan CPU yang tinggi dan menggunakan jumlah maksimum pekerja yang ditetapkan. Mengaktifkan penskalaan otomatis dapat meningkatkan performa.
  • HIGH_FAN_OUT: Jeda fusion dapat disisipkan setelah satu atau beberapa transformasi untuk meningkatkan paralelisme.
  • MAX_NUM_WORKERS: Penskalaan otomatis: Jumlah maksimum pekerja dapat ditingkatkan. Tugas tersebut menggunakan penskalaan otomatis, memiliki penggunaan CPU yang tinggi, dan menggunakan jumlah maksimum pekerja yang ditetapkan. Menambah 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: Menggunakan alur kerja pra-build image worker untuk meningkatkan waktu startup pekerja dan keandalan penskalaan otomatis.
  • ACTIVE_KEYS (Pratinjau): Jumlah total kunci aktif kurang dari jumlah total core dan peningkatan skala tidak akan membantu.
  • LONG_WORK_ITEM: Pekerjaan di tahap gabungan memerlukan waktu terlalu lama untuk diproses, menunjukkan operasi yang berjalan lambat atau macet.

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

Dataflow Insights juga menyediakan kolom content khusus yang berisi subkolom dengan informasi tambahan dan metadata 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.

Insights

Fan-out tinggi terdeteksi

Jika 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 yang pertama, yang memaksa semua elemen output dari input tertentu ke worker yang sama dan mengurangi paralelisme serta memperlambat performa.

Untuk menyelesaikan masalah ini:

  • Masukkan GroupByKey dan pisahkan grup setelah ParDo pertama. Layanan Dataflow tidak pernah menggabungkan operasi ParDo di seluruh agregasi. Untuk mengetahui informasi selengkapnya, lihat Pengoptimalan Fusion
  • Teruskan PCollection perantara sebagai input samping ke ParDo lain. Layanan Dataflow selalu mewujudkan input samping.
  • Masukkan langkah Reshuffle. Reshuffle mencegah fusi, memeriksa data, dan mengonfigurasi ulang strategi windowing sehingga tidak ada data yang dihapus. Reshuffle didukung oleh Dataflow meskipun ditandai sebagai tidak digunakan lagi dalam dokumentasi Apache Beam (perhatikan bahwa perombakan data dapat meningkatkan biaya 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 tugas tersebut mungkin menggunakan lebih banyak pekerja jika jumlah maksimum ini ditingkatkan, pesan berikut akan muncul:

maximum number of workers could be increased

Misalnya, rekomendasi ini berlaku untuk tugas batch atau streaming yang menetapkan maxNumWorkers ke 50 ketika semua 50 pekerja digunakan dengan pemakaian CPU pekerja rata-rata di atas 80%. Rekomendasi ini juga berlaku untuk tugas streaming yang menetapkan maxNumWorkers ke 50 saat semua 50 pekerja digunakan dengan penggunaan CPU pekerja rata-rata di atas 50% dan tugas tersebut memiliki perkiraan waktu pemrosesan selama 2 menit.

Biasanya, meningkatkan maxNumWorkers akan meningkatkan throughput pipeline. Pipeline batch dapat selesai dalam waktu lebih singkat, dan pipeline streaming dapat menangani lonjakan data yang lebih besar serta memproses lebih banyak elemen per detik. Namun, hal ini mungkin menyebabkan peningkatan biaya. Untuk 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 tersebut, Dataflow akan menggunakan nilai default yang tercantum dalam Panduan penskalaan otomatis.
  • Tidak apa-apa jika performa pipeline memadai.
    • Untuk pipeline batch, pastikan total waktu berjalan memenuhi persyaratan Anda.
    • Untuk pipeline streaming, lihat grafik Keaktualan data di tab Metrik Tugas di halaman tugas. Pastikan nilai dalam grafik tidak terus meningkat dan berada dalam batas yang dapat diterima.

Penskalaan otomatis: Menyetel jumlah awal pekerja dapat meningkatkan performa tugas

Saat Dataflow mendeteksi bahwa tugas menggunakan sejumlah pekerja tertentu selama lebih dari 50% dari waktu berjalan, menetapkan jumlah awal pekerja 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

Jika Dataflow mendeteksi bahwa pekerja untuk suatu tugas gagal karena error Out of Memory, pesan berikut akan muncul:

Some workers are out of memory

Beberapa pekerja untuk tugas gagal karena kehabisan memori. Meskipun ada kemungkinan tugas akan selesai, error ini juga dapat menyebabkan tugas tidak berhasil diselesaikan atau memperlambat performa.

Coba saran berikut:

  • Tingkatkan 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 Dataflow kehabisan memori.

Alur kerja pra-build tidak digunakan

Saat Dataflow mendeteksi pipeline tempat alur kerja pra-build gambar pekerja tidak digunakan, pesan berikut akan muncul:

pre-build workflow not utilized

Jika alur kerja pra-build image pekerja tidak digunakan, pipeline akan 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-build gambar pekerja saat meluncurkan pipeline. Untuk mengetahui informasi selengkapnya, lihat Melakukan pra-build dependensi Python.

Jika container bawaan yang 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 terlambat karena jumlah kunci aktif kurang dari jumlah total core, peningkatan skala 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 pada satu inti pada satu waktu untuk alasan ketepatan.

Dalam beberapa kasus, beberapa inti bekerja terlalu banyak sementara yang lainnya tidak ada aktivitas. Untuk mengatasi masalah ini, tambah jumlah kunci, yang juga menambah jumlah rangkaian pesan aktif.

Solusi potensial untuk meningkatkan kunci: - Anda dapat menambah jumlah kunci 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], akan ada lebih banyak kunci yang meningkatkan paralelisme. - Untuk pipeline yang menulis ke BigQuery yang sink berpotensi menjadi bottleneck, lihat artikel ini. - Untuk sumber/sink lainnya, periksa apakah sumber/sink memiliki parameter numShards dan tingkatkan. Secara umum, satu shard dipetakan ke satu kunci. - Untuk panduan yang lebih umum tentang model eksekusi kami, lihat artikel ini. - Fanout dapat digunakan untuk mengambil satu tombol input dan menambahkan sebuah hash ke dalamnya untuk menghasilkan beberapa kunci output. Referensi

Pengeluaran tahap terlalu lama di pekerjaan

Saat Dataflow mendeteksi bahwa pekerjaan sering memakan waktu terlalu lama untuk menyelesaikan pemrosesan, pesan berikut akan muncul:

Stage spending too long on work

Dataflow mengirimkan tugas ke stage yang digabungkan dalam paket elemen yang akan diproses, dan setiap paket akan dianggap selesai setelah semua elemen dan output-nya diproses untuk tahap tersebut. Pipeline streaming dioptimalkan di sekitar paket tugas 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 mungkin disebabkan oleh transformasi pengguna yang macet atau lambat. Transformasi ini dapat diidentifikasi melalui peringatan yang dimunculkan di Cloud Logging dan tab Diagnostik, 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 apa yang menyebabkan pelambatan dan seberapa sering. Untuk mengetahui informasi selengkapnya, lihat Memecahkan Masalah Error Dataflow Umum.

Jika hasil penyelidikan menunjukkan bahwa waktu pemrosesan yang lama tidak disebabkan oleh transformasi pengguna, sebaiknya hubungi Dukungan Cloud dan jelaskan langkah-langkah yang perlu diselidiki.

Tugas macet di item tugas

Saat Dataflow mendeteksi bahwa ada kunci yang 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 dengan kunci tertentu. Jika terjadi error saat memproses pesan, pesan tersebut akan dicoba ulang. Namun, pesan tersebut masih dapat diterima jika pesan dicoba lagi dua atau tiga kali. Namun, jika terjadi error berulang kali, seperti sepuluh kali berturut-turut, hal ini biasanya menunjukkan masalah mendasar pada kode pipeline. Ketika pesan tertentu pada sebuah kunci dicoba ulang, pesan lain pada kunci yang sama tidak dapat membuat progres. Jika pesan gagal 10 kali atau lebih, masalahnya kemungkinan tidak akan selesai dengan sendirinya. Kegagalan pesan ini dapat menyebabkan masalah pipeline seperti:

  • menunda watermark
  • memperoleh backlog
  • mencegah operasi pengosongan menyelesaikan

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 menyelesaikan tugas.

Streaming Engine tidak diaktifkan

Jika 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.

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