全部产品
Search
文档中心

ApsaraMQ for Kafka:Mengapa rebalances sering terjadi pada klien konsumen saya?

更新时间:Jun 28, 2025

Penyebabnya mungkin versi ApsaraMQ for Kafka klien sudah usang, atau konsumen tidak memiliki thread terpisah untuk mengirim pesan heartbeat.

Gejala

Rebalances sering terjadi pada klien konsumen saya saat menggunakan Message Queue for Apache Kafka.

Penyebab

Kemungkinan penyebab adalah:

  • Untuk klien sebelum versi 0.10.2: Konsumen tidak memiliki thread terpisah untuk mengirim pesan heartbeat. Pesan heartbeat dikirim melalui antarmuka poll. Jika respons konsumsi macet, permintaan pengiriman pesan heartbeat habis waktu, sehingga memicu rebalance.

  • Untuk klien versi 0.10.2 dan yang lebih baru: Tidak ada pesan yang ditarik setelah waktu yang ditentukan oleh parameter max.poll.interval.ms berakhir. Hal ini menyebabkan klien terputus dari antrian pesan dan memicu rebalance. Nilai default parameter max.poll.interval.ms adalah 5 menit.

Solusi

Anda harus memahami parameter berikut:

  • session.timeout.ms: Menentukan periode timeout untuk permintaan pengiriman pesan heartbeat. Anda dapat menentukan nilai kustom sesuai kebutuhan bisnis Anda.

  • max.poll.records: Menentukan jumlah maksimum pesan yang dikembalikan untuk setiap poll.

  • Untuk klien sebelum versi 0.10.2: Pesan heartbeat dikirim melalui antarmuka poll. Konsumen tidak memiliki thread terpisah untuk mengirim pesan heartbeat.

  • Untuk klien versi 0.10.2 dan yang lebih baru: Anda dapat mengatur parameter max.poll.interval.ms untuk mencegah klien tidak mengonsumsi pesan dalam waktu lama.

  1. Item berikut memberikan referensi bagi Anda untuk menetapkan nilai parameter:

    • session.timeout.ms: Untuk klien sebelum versi 0.10.2, atur nilai lebih besar dari waktu yang diperlukan untuk mengonsumsi satu batch pesan tetapi lebih kecil dari 30 detik. Kami sarankan Anda mengatur nilainya menjadi 25 detik. Untuk klien versi 0.10.2 dan yang lebih baru, pertahankan nilai default 10 detik.

    • max.poll.records: Atur nilai jauh lebih kecil dari jumlah pesan yang dikonsumsi per thread per detik dikalikan dengan jumlah thread dikalikan dengan nilai parameter max.poll.interval.ms.

    • max.poll.interval.ms: Atur nilai lebih besar dari nilai max.poll.records dibagi dengan hasil kali jumlah pesan yang dikonsumsi per thread per detik dikalikan dengan jumlah thread).

  2. Tingkatkan kecepatan konsumsi klien dan alokasikan thread terpisah untuk memproses logika konsumsi.

  3. Kurangi jumlah topik yang berlangganan oleh grup menjadi tidak lebih dari lima. Kami sarankan satu grup hanya berlangganan satu topik.

  4. Tingkatkan klien ke versi 0.10.2 atau yang lebih baru.