Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menyediakan solusi untuk masalah performa umum yang mungkin Anda temui saat menggunakan pustaka Azure Event Hubs di Azure SDK untuk Java. Jika Anda mencari solusi untuk masalah umum lainnya yang mungkin Anda temui saat menggunakan Azure Event Hubs, lihat Pemecahan Masalah Azure Event Hubs.
Menggunakan processEvent atau processEventBatch
Saat Anda menggunakan processEvent callback, setiap EventData instance memanggil kode Anda. Proses ini bekerja dengan baik pada lalu lintas rendah atau sedang di event hub.
Jika pusat acara memiliki lalu lintas tinggi dan diantisipasi throughput tinggi, biaya agregat untuk terus memanggil callback Anda dapat menghambat performa EventProcessorClient. Dalam hal ini, Anda harus menggunakan processEventBatch.
Untuk setiap partisi, panggilan balik Anda dipanggil satu per satu. Waktu pemrosesan yang tinggi dalam panggilan balik menghambat performa karena EventProcessorClient tidak terus mendorong lebih banyak peristiwa ke aliran berikutnya atau meminta lebih banyak instans dari layanan Event Hubs.
Biaya titik pemeriksaan
Saat Anda menggunakan Azure Blob Storage sebagai penyimpanan titik pemeriksaan, ada biaya jaringan untuk titik pemeriksaan karena membuat permintaan HTTP dan menunggu respons. Proses ini dapat memakan waktu hingga beberapa detik karena latensi jaringan, performa Azure Blob Storage, lokasi sumber daya, dan sebagainya.
Melakukan titik pemeriksaan setiap kali EventData instans diproses dapat menghambat performa karena biaya yang tinggi dari pembuatan permintaan HTTP tersebut. Anda tidak boleh melakukan pemeriksaan jika panggilan balik Anda tidak mengolah peristiwa apapun, atau harus melakukan pemeriksaan setelah mengolah sejumlah peristiwa.
Gunakan LoadBalancingStrategy.BALANCED atau LoadBalancingStrategy.GREEDY
Saat Anda menggunakan LoadBalancingStrategy.BALANCED, EventProcessorClient klaim satu partisi untuk setiap siklus penyeimbangan beban. Jika ada 32 partisi di pusat aktivitas, dibutuhkan 32 iterasi penyeimbangan beban untuk mengklaim semua partisi. Jika pengguna mengetahui sejumlah EventProcessorClient instans yang berjalan, mereka dapat menggunakan LoadBalancingStrategy.GREEDY untuk mengklaim bagian partisi mereka dalam satu siklus penyeimbangan beban.
Untuk informasi selengkapnya tentang setiap strategi, lihat LoadBalancingStrategy.java di repositori azure-sdk-for-java.
Konfigurasikan prefetchCount
Nilai prefetch default adalah 500. Ketika tautan penerima AMQP dibuka, maka diberikan kredit sebesar 500 pada tautan tersebut. Dengan asumsi bahwa setiap EventData instans adalah satu kredit tautan, EventProcessorClient melakukan prefetch 500 EventData instans. Ketika semua event telah dikonsumsi, klien prosesor menambahkan 500 kredit ke tautan untuk menerima lebih banyak pesan. Alur ini berulang saat EventProcessorClient masih memiliki kepemilikan partisi.
Mengonfigurasi prefetchCount mungkin memiliki implikasi performa jika angka terlalu rendah. Setiap kali tautan penerimaan AMQP memberikan kredit, layanan jarak jauh mengirimkan ACK. Untuk skenario throughput tinggi, beban tambahan melakukan ribuan permintaan klien dan ACK layanan dapat menurunkan kinerja.
Mengonfigurasi prefetchCount mungkin memiliki implikasi performa jika angka terlalu tinggi. Ketika kredit x dialokasikan, layanan Event Hubs tahu bahwa itu dapat mengirim paling banyak x pesan. Ketika setiap EventData instans diterima, instans tersebut ditempatkan dalam antrean memori, menunggu diproses. Jumlah instans EventData yang tinggi dalam antrean dapat mengakibatkan penggunaan memori yang sangat tinggi.
Langkah selanjutnya
Jika panduan pemecahan masalah dalam artikel ini tidak membantu mengatasi masalah saat Anda menggunakan pustaka klien Azure SDK for Java, kami sarankan Anda mengajukan masalah di repositori Azure SDK for Java GitHub .