全部产品
Search
文档中心

ApsaraMQ for Kafka:Pemecahan masalah rebalance konsumen yang sering terjadi di ApsaraMQ for Kafka

更新时间:Feb 28, 2026

Jika client konsumen Anda memicu rebalance terlalu sering, penyebab utamanya biasanya adalah pemrosesan pesan yang lambat, konfigurasi parameter konsumen yang tidak tepat, atau penggunaan versi client yang sudah usang. Topik ini menjelaskan penyebab berdasarkan versi client dan memberikan solusi yang sesuai.

Gejala

Rebalance terjadi secara sering pada client konsumen Anda saat menggunakan ApsaraMQ for Kafka.

Penyebab

Penyebabnya bergantung pada versi client yang digunakan.

  • Client versi sebelum 0.10.2: Konsumen tidak memiliki thread heartbeat terpisah. Heartbeat dikirim melalui metode poll(). Jika pemrosesan pesan memakan waktu terlalu lama, permintaan heartbeat mengalami timeout dan memicu rebalance.

  • Client versi 0.10.2 atau lebih baru: Terdapat thread heartbeat terpisah. Namun, jika tidak ada pesan yang ditarik setelah waktu yang ditentukan oleh max.poll.interval.ms berlalu, client keluar dari consumer group dan memicu rebalance. Nilai default max.poll.interval.ms adalah 5 menit.

Parameter kunci

Parameter berikut mengontrol perilaku rebalance:

ParameterVersi yang berlakuDeskripsi
session.timeout.msSemuaSession timeout. Jika tidak ada heartbeat yang diterima dalam periode ini, broker menghapus konsumen dari consumer group.
max.poll.recordsSemuaJumlah maksimum pesan yang dikembalikan per panggilan ke metode poll().
max.poll.interval.ms0.10.2 atau lebih baruInterval maksimum antara dua panggilan berturut-turut ke metode poll(). Jika interval ini dilampaui, konsumen keluar dari consumer group dan memicu rebalance.

Solusi

  1. Sesuaikan nilai parameter

    Konfigurasikan parameter berikut berdasarkan versi client Anda:

    session.timeout.ms

    Versi clientNilai yang direkomendasikan
    Sebelum 0.10.2Lebih besar daripada waktu untuk memproses satu batch pesan, tetapi tidak lebih dari 30 detik. Disarankan 25 detik.
    0.10.2 atau lebih baruPertahankan nilai default 10 detik.

    max.poll.records

    Tetapkan nilai ini jauh lebih kecil daripada hasil rumus berikut:

    max.poll.records << messages_per_thread_per_second * number_of_threads * max.poll.interval.ms

    max.poll.interval.ms (hanya untuk versi 0.10.2 atau lebih baru)

    Tetapkan nilai ini lebih besar daripada hasil rumus berikut:

    max.poll.interval.ms > max.poll.records / (messages_per_thread_per_second * number_of_threads)
  2. Tingkatkan kecepatan konsumsi dan pisahkan thread pemrosesan

    Tingkatkan kecepatan pemrosesan pesan dengan mengalokasikan thread terpisah untuk logika konsumsi. Hal ini mencegah pemrosesan lambat menghambat heartbeat atau melebihi interval poll.

  3. Kurangi jumlah topik per consumer group

    Kurangi jumlah topik yang di-subscribe oleh setiap consumer group. Subscribe tidak lebih dari lima topik per consumer group. Untuk stabilitas optimal, subscribe satu topik per consumer group.

  4. Lakukan upgrade ke versi 0.10.2 atau lebih baru

    Jika Anda menggunakan client versi sebelum 0.10.2, lakukan upgrade ke versi 0.10.2 atau lebih baru. Versi yang lebih baru menggunakan thread heartbeat terpisah, sehingga penundaan pemrosesan tidak menyebabkan timeout heartbeat.