All Products
Search
Document Center

ApsaraMQ for RocketMQ:Menangani akumulasi pesan

Last Updated:Mar 12, 2026

Ketika sebuah instans ApsaraMQ for RocketMQ memicu peringatan akumulasi pesan, nilai Real-time Accumulated Messages pada halaman Group Details lebih tinggi dari yang diharapkan. Pada halaman Message Tracing, pesan tampak telah dipublikasikan ke broker tetapi belum dikirimkan ke konsumen.

Ikuti langkah-langkah berikut untuk mengidentifikasi akar penyebab dan menyelesaikan akumulasi tersebut.

Mengapa pesan terakumulasi

Setelah pesan dikirim ke broker, client konsumen menariknya berdasarkan offset konsumennya. Akumulasi terjadi ketika client tidak dapat mengonsumsi pesan cukup cepat. Dua penyebab umum:

  • Waktu konsumsi lama — Logika bisnis dalam thread konsumsi memerlukan waktu terlalu lama per pesan.

  • Konkurensi thread rendah — Terlalu sedikit thread konsumsi yang berjalan sehingga tidak mampu mengimbangi laju pesan masuk.

Untuk informasi lebih lanjut, lihat Akumulasi dan latensi pesan.

Pemecahan Masalah

Langkah 1: Tentukan lokasi akumulasi pesan

Periksa file ons.log client untuk menemukan pesan berikut:

the cached message count exceeds the threshold
  • Pesan log ditemukan — Antrian buffer sisi client penuh. Pesan terakumulasi di sisi client. Lanjutkan ke Langkah 2.

  • Pesan log tidak ditemukan — Pesan tidak terakumulasi di sisi client. Hubungi dukungan teknis Alibaba Cloud.

Langkah 2: Periksa waktu konsumsi pesan

Jika waktu konsumsi per pesan secara abnormal tinggi, akar penyebab kemungkinan besar terletak pada logika bisnis. Lanjutkan ke Langkah 3 untuk memeriksa stack thread.

Jika waktu konsumsi normal, akumulasi disebabkan oleh konkurensi thread yang rendah. Untuk mengatasinya:

  • Tingkatkan jumlah thread konsumsi.

  • Tambahkan node konsumen untuk melakukan scale out.

Cari waktu konsumsi

Gunakan salah satu metode berikut:

  • Jejak pesan — Masuk ke Konsol ApsaraMQ for RocketMQ, buka halaman Message Tracing, lalu klik Create Query Task. Pilih Query by Message ID dan temukan pesan tersebut. Di bagian Consumer, periksa nilai Consumption Duration. Untuk informasi lebih lanjut, lihat Kueri jejak pesan.

    Consumption time

  • Detail grup — Pada halaman Group Details, temukan bagian Client Connection Information. Klik More di kolom Actions untuk client target. Bidang Response Time (ms/Message) menunjukkan rata-rata waktu konsumsi per pesan. Untuk informasi lebih lanjut, lihat Lihat detail konsumen.

    Consumption status

  • Layanan pemantauan — Gunakan Application Real-Time Monitoring Service (ARMS) atau solusi pemantauan lainnya untuk mengumpulkan metrik waktu konsumsi.

Langkah 3: Periksa stack ConsumeMessageThread

Thread ConsumeMessageThread berisi logika konsumsi pesan. Periksa stack-nya untuk mengidentifikasi bottleneck seperti panggilan yang terblokir, sleep berlebihan, atau I/O eksternal yang lambat.

Untuk panduan menginterpretasikan status thread, lihat dokumentasi Java Thread.State.

Dapatkan stack thread

Opsi A: Konsol ApsaraMQ for RocketMQ

Pada halaman Group Details, temukan bagian Client Connection. Klik View Stack Information di kolom Actions untuk client target. Untuk informasi lebih lanjut, lihat Lihat detail konsumen.

Opsi B: jstack pada host

  1. Masuk ke host tempat instans konsumen dengan akumulasi pesan berjalan. Untuk menemukan IP host, lihat Lihat status konsumen.

  2. Temukan ID proses Java:

       ps -ef | grep java
       jps -lm
  3. Dump stack thread:

       jstack -l <pid> > /tmp/<pid>.jstack
  4. Filter entri ConsumeMessageThread:

       cat /tmp/<pid>.jstack | grep ConsumeMessageThread -A 10 --color

Pola stack umum

Thread idle (tidak ada akumulasi)

Thread konsumsi berada dalam status WAITING, menunggu untuk menarik pesan dari antrian buffer sisi client. Ini normal saat tidak ada pesan yang perlu dikonsumsi.

Idle stack

Thread terblokir karena sleep atau contention kunci

Thread konsumsi terblokir dalam panggilan sleep(), yang memperlambat konsumsi.

Blocked stack - sleep

Thread terblokir oleh I/O eksternal

Thread konsumsi terblokir oleh panggilan HTTP eksternal atau operasi database, yang memperlambat konsumsi.

Blocked stack - external I/O

Langkah 4: Lewati pesan yang terakumulasi (opsional)

Jika pesan yang terakumulasi sudah tidak relevan dan dapat dilewati dengan aman, atur ulang offset konsumen ke posisi terbaru. Konsumen kemudian akan mulai mengonsumsi dari pesan terbaru dan melewati backlog tersebut.

Untuk petunjuknya, lihat Atur ulang offset konsumen.

Peringatan

Mengatur ulang offset konsumen akan melewati semua pesan yang terakumulasi. Pastikan pesan-pesan tersebut tidak lagi diperlukan sebelum melanjutkan.

Langkah selanjutnya