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 thresholdPesan 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.

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.

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
Masuk ke host tempat instans konsumen dengan akumulasi pesan berjalan. Untuk menemukan IP host, lihat Lihat status konsumen.
Temukan ID proses Java:
ps -ef | grep java jps -lmDump stack thread:
jstack -l <pid> > /tmp/<pid>.jstackFilter 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.

Thread terblokir karena sleep atau contention kunci
Thread konsumsi terblokir dalam panggilan sleep(), yang memperlambat konsumsi.

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

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.
Mengatur ulang offset konsumen akan melewati semua pesan yang terakumulasi. Pastikan pesan-pesan tersebut tidak lagi diperlukan sebelum melanjutkan.
Langkah selanjutnya
Akumulasi dan latensi pesan — Mekanisme konsumsi dan akar penyebab akumulasi.
Lihat detail konsumen — Status konsumen, informasi koneksi, dan jejak stack.
Atur ulang offset konsumen — Lewati pesan yang terakumulasi dengan mengatur ulang ke offset terbaru.