Menggunakan Dataflow Insights

Anda dapat menggunakan Insight Dataflow untuk membantu mengoptimalkan performa tugas. Topik ini menunjukkan cara berinteraksi dengan Insight Dataflow 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

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 Anda menggunakan Insight Dataflow, perlu diingat bahwa beberapa rekomendasi mungkin tidak relevan dengan kasus penggunaan Anda.

Sebelum memulai

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

  1. Aktifkan Recommender API.
  2. Menyiapkan autentikasi.

    Select the tab for how you plan to use the samples on this page:

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    REST

    Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, Anda menggunakan kredensial yang Anda berikan ke gcloud CLI.

      Menginstal Google Cloud CLI. Setelah penginstalan, lakukan inisialisasi Google Cloud CLI dengan menjalankan perintah berikut:

      gcloud init

      Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

    Untuk mengetahui informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud .

  3. 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
  4. 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 tertentu.

    Sebelum menjalankan perintah, ganti nilai berikut:

    • PROJECT_ID: ID project yang ingin Anda lihat daftar insight-nya.
    • 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
    

    Output 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 tertentu.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID project yang ingin Anda lihat daftar insight-nya.
    • 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 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 yang terkait dengannya, 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 ingin Anda lihat daftar insight-nya.
    • 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 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 ingin Anda lihat daftar insight-nya.
    • 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 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, Insight Dataflow menyediakan subjenis berikut:

    • AUTOSCALING_NOT_ENABLED: Penskalaan otomatis dapat diaktifkan. Tugas memiliki pemakaian CPU yang tinggi dan menggunakan jumlah maksimum pekerja yang ditetapkan. Mengaktifkan penskalaan otomatis dapat meningkatkan performa.
    • HIGH_FAN_OUT: Pemecahan penggabungan dapat disisipkan setelah satu atau beberapa transformasi untuk meningkatkan paralelisme.
    • MAX_NUM_WORKERS: Penskalaan otomatis: Jumlah maksimum pekerja dapat ditingkatkan. Tugas menggunakan penskalaan otomatis, memiliki penggunaan CPU yang tinggi, dan menggunakan jumlah maksimum pekerja 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 menyebabkan tugas gagal.
    • PREBUILD_NOT_UTILIZED: Gunakan alur kerja pra-pembuatan image pekerja untuk meningkatkan waktu mulai 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: Pemrosesan pekerjaan dalam tahap gabungan memerlukan waktu terlalu lama, yang menunjukkan operasi berjalan lambat atau macet.

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

    Insight Dataflow juga menyediakan kolom content khusus yang berisi sub-kolom dengan informasi dan metadata tambahan tentang insight. Bergantung pada kasus penggunaan Anda, sub-bidang 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

    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 terhadap 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 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 mengetahui informasi selengkapnya, lihat Pengoptimalan Fusion
    • Teruskan PCollection perantara sebagai input samping ke ParDo lain. Layanan Dataflow selalu mewujudkan input samping.
    • Sisipkan langkah Acak Ulang. Pengacakan ulang mencegah penggabungan, memeriksa titik pemeriksaan data, dan mengonfigurasi ulang strategi windowing sehingga tidak ada data yang dihapus. Pengacakan ulang didukung oleh Dataflow meskipun ditandai tidak digunakan lagi dalam dokumentasi Apache Beam (perhatikan bahwa mengacak ulang 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 muncul untuk tugas batch atau streaming yang memiliki maxNumWorkers ditetapkan ke 50 saat semua 50 pekerja digunakan dengan penggunaan CPU pekerja rata-rata di atas 80%. Rekomendasi ini juga muncul untuk tugas streaming yang memiliki maxNumWorkers yang ditetapkan ke 50 saat semua 50 pekerja digunakan dengan penggunaan CPU pekerja rata-rata di atas 50% dan tugas memiliki perkiraan waktu pemrosesan lebih dari 2 menit.

    Biasanya, peningkatan maxNumWorkers akan meningkatkan throughput pipeline. Pipeline batch dapat diselesaikan dalam waktu yang lebih singkat, dan pipeline streaming dapat menangani lonjakan data yang lebih besar dan memproses lebih banyak elemen per detik. Namun, hal ini mungkin 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:

    • Menambah atau menghapus opsi pipeline maxNumWorkers. Tanpa opsi ini, Dataflow akan menggunakan nilai default yang tercantum dalam Panduan penskalaan otomatis.
    • Tidak apa-apa untuk tidak melakukan apa pun jika performa pipeline sudah 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.

    Worker gagal dengan error OutOfMemory

    Saat 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 tugas dapat diselesaikan, error ini juga dapat mencegah tugas diselesaikan dengan berhasil atau memperlambat performa.

    Coba saran berikut:

    Alur kerja pra-build tidak digunakan

    Jika Dataflow mendeteksi pipeline yang tidak menggunakan alur kerja pra-build image pekerja, 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 mulai pekerja, yang menurunkan throughput tugas dan menyebabkan perilaku penskalaan otomatis yang tidak andal.

    Untuk mengatasi masalah ini, gunakan alur kerja pra-build image pekerja saat meluncurkan pipeline. Untuk mengetahui informasi selengkapnya, lihat Membangun dependensi Python terlebih dahulu.

    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 suatu 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 sekumpulan data yang akan diproses dan kunci hanya dapat dijalankan pada satu core dalam satu waktu karena alasan kebenaran.

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

    Solusi potensial untuk menambah kunci: - Anda dapat menambah 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 tersedia, yang meningkatkan paralelisme. - Untuk pipeline yang menulis ke BigQuery yang berpotensi mengalami hambatan di sink, lihat artikel ini. - Untuk sumber/tujuan lain, periksa apakah 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

    Menghabiskan terlalu banyak waktu untuk bekerja

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

    Stage spending too long on work
    

    Dataflow mengirimkan tugas ke tahap gabungan dalam paket elemen yang akan diproses, dan setiap paket dianggap selesai setelah semua elemen dan outputnya diproses untuk tahap tersebut. Pipeline streaming dioptimalkan di sekitar kumpulan 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 dapat disebabkan oleh transformasi pengguna yang macet atau lambat. Transformasi ini dapat diidentifikasi berdasarkan peringatan yang dikeluarkan di Cloud Logging dan tab Diagnostiknya, dengan frasa utama "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 perlambatan dan seberapa sering. Untuk mengetahui informasi selengkapnya, lihat Memecahkan Masalah Error Aliran Data 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 menyelidiki.

    Pekerjaan macet di item tugas

    Saat Dataflow mendeteksi bahwa kunci macet karena satu item kerja telah berulang kali gagal dan kemudian 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 lagi. Pesan dapat dicoba lagi dua atau tiga kali. Namun, jika error terjadi berulang kali, seperti sepuluh kali berturut-turut, biasanya hal ini menunjukkan masalah mendasar pada kode pipeline. Saat pesan tertentu pada kunci dicoba lagi, pesan lain di bawah kunci yang sama tidak dapat diproses. Jika pesan gagal 10 kali atau lebih, masalah ini kemungkinan tidak akan teratasi dengan sendirinya. Kegagalan pesan ini dapat menyebabkan masalah pipeline seperti:

    • menunda watermark
    • backlog yang terakumulasi
    • mencegah operasi pengurasan 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 agar tugas tidak macet.

    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.
    

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