Panduan pemecahan masalah Apache Kafka for Azure Event Hubs

Artikel ini menyediakan tips pemecahan masalah untuk masalah yang mungkin Anda alami saat menggunakan Azure Event Hubs for Apache Kafka.

Pengecualian Server Sibuk

Anda mungkin menerima pengecualian Server Sibuk karena pembatasan Kafka. Dengan klien AMQP, Azure Event Hubs segera mengembalikan pengecualian server sibuk setelah pembatasan layanan. Ini setara dengan pesan "coba lagi nanti". Di Kafka, pesan ditunda sebelum diselesaikan. Panjang tunda dikembalikan dalam milidetik seperti throttle_time_ms dalam respons buat/ambil. Dalam sebagian besar kasus, permintaan tertunda ini tidak dicatat sebagai pengecualian server sibuk di dasbor Azure Event Hubs. Sebaliknya, nilai throttle_time_ms respons harus digunakan sebagai indikator bahwa throughput telah melebihi kuota yang disediakan.

Jika lalu lintas berlebihan, layanan memiliki perilaku berikut:

  • Jika penundaan permintaan menghasilkan melebihi batas waktu permintaan (request.timeout.ms), Azure Event Hubs mengembalikan kode kesalahan Pelanggaran Kebijakan .
  • Jika penundaan permintaan ambil melebihi batas waktu permintaan, Azure Event Hubs mencatat permintaan sebagai dibatasi dan merespons dengan sekumpulan rekaman kosong dan tanpa kode kesalahan.

Kluster khusus tidak memiliki mekanisme pembatasan. Anda bebas mengonsumsi semua sumber daya kluster Anda.

Tidak ada rekaman yang diterima

Anda mungkin melihat konsumen tidak mendapatkan rekaman apa pun dan terus menyeimbangkan ulang. Dalam skenario ini, konsumen tidak mendapatkan rekaman dan terus menyeimbangkan ulang. Tidak ada pengecualian atau kesalahan ketika hal itu terjadi, tetapi log Kafka akan menunjukkan bahwa konsumen terjebak dalam mencoba untuk bergabung kembali dengan grup dan menetapkan partisi. Ada beberapa kemungkinan penyebabnya:

  • Pastikan request.timeout.ms Anda setidaknya adalah nilai 60000 yang direkomendasikan dan session.timeout.ms setidaknya adalah nilai 30000 yang direkomendasikan. Memiliki pengaturan ini terlalu rendah dapat menyebabkan batas waktu konsumen, yang kemudian menyebabkan penyeimbangan ulang (yang kemudian menyebabkan lebih banyak batas waktu, yang menyebabkan lebih banyak penyeimbangan ulang, dan sebagainya)
  • Jika konfigurasi Anda cocok dengan nilai yang direkomendasikan dan Anda masih melihat penyeimbangan ulang konstan, jangan ragu untuk membuka masalah (pastikan untuk menyertakan seluruh konfigurasi Anda dalam masalah agar kami dapat membantu debug)!

Masalah versi format Kompresi/Pesan

Kafka mendukung kompresi dan Azure Event Hubs for Kafka saat ini tidak. Kesalahan yang menyebutkan versi format pesan (misalnya, The message format version on the broker does not support the request.) disebabkan ketika klien mencoba mengirim pesan Kafka terkompresi ke perantara kami.

Jika data terkompresi diperlukan, mengompresi data Anda sebelum mengirimkannya ke perantara dan mendekompresi setelah menerima adalah solusi yang valid. Isi pesan hanyalah array byte untuk layanan agar kompresi/ dekompresi sisi klien tidak akan menyebabkan masalah apa pun.

UnknownServerException

Anda mungkin menerima UnknownServerException dari pustaka klien Kafka yang mirip dengan contoh berikut:

org.apache.kafka.common.errors.UnknownServerException: The server experienced an unexpected error when processing the request

Buka tiket dengan dukungan Microsoft. Pengelogan tingkat debug dan tanda waktu pengecualian dalam UTC sangat membantu dalam men-debug masalah.

Masalah lain

Periksa item berikut jika Anda melihat masalah saat menggunakan Kafka di Azure Event Hubs.

  • Lalu lintas pemblokiran firewall - Pastikan port 9093 tidak diblokir oleh firewall Anda.
  • TopicAuthorizationException - Penyebab paling umum pengecualian ini adalah:
    • Salah tik di string koneksi dalam file konfigurasi Anda, atau
    • Mencoba menggunakan Azure Event Hubs for Kafka pada namespace tingkat Dasar. Fitur Azure Event Hubs for Kafka tidak didukung di tingkat dasar.
  • Versi Kafka tidak cocok - Ekosistem Azure Event Hubs for Kafka mendukung Kafka versi 1.0 dan yang lebih baru. Beberapa aplikasi yang menggunakan Kafka versi 0.10 dan yang lebih baru kadang-kadang dapat berfungsi karena kompatibilitas mundur protokol Kafka, tetapi kami sangat merekomendasikan untuk tidak menggunakan versi API lama. Kafka versi 0.9 dan yang lebih lama tidak mendukung protokol SASL yang diperlukan dan tidak dapat terhubung ke Azure Event Hubs.
  • Pengodean aneh pada header AMQP saat mengonsumsi Kafka - ketika mengirim kejadian ke pusat aktivitas melalui AMQP, header payload AMQP diserialisasikan dalam pengodean AMQP. Konsumen Kafka tidak mendeserialisasi header dari AMQP. Untuk membaca nilai header, lakukan dekode header AMQP secara manual. Atau, Anda dapat menghindari penggunaan header AMQP jika Anda tahu bahwa Anda akan mengonsumsi melalui protokol Kafka. Untuk informasi selengkapnya, lihat masalah GitHub ini.
  • Autentikasi SASL - Membuat kerangka kerja Anda bekerja sama dengan protokol autentikasi SASL yang diperlukan oleh Azure Event Hubs bisa lebih sulit daripada kelihatannya. Lihat apakah Anda dapat memecahkan masalah konfigurasi menggunakan sumber daya kerangka kerja Anda pada autentikasi SASL.

Batas

Apache Kafka vs. Azure Event Hubs Kafka. Untuk sebagian besar, antarmuka Kafka Azure Event Hubs memiliki default, properti, kode kesalahan, dan perilaku umum yang sama dengan Apache Kafka. Contoh bahwa keduanya berbeda secara eksplisit (atau ketika Azure Event Hubs memberlakukan batas yang tidak dilakukan Kafka) tercantum di bawah ini:

  • Panjang maksimum properti group.id adalah 256 karakter
  • Ukuran maksimum offset.metadata.max.bytes adalah 1024 byte
  • Penerapan offset dibatasi ke 4 panggilan/detik per partisi dengan ukuran log internal maksimum 1 MB

Langkah berikutnya

Untuk mempelajari selengkapnya tentang Pusat Aktivitas dan Azure Event Hubs for Kafka, lihat artikel berikut ini: