Topik ini menjelaskan antrian pesan dalam ApsaraMQ for RocketMQ, mencakup definisi, hubungan model, properti internal, kompatibilitas versi, dan rekomendasi penggunaan.
Definisi
Antrian adalah kontainer dalam ApsaraMQ for RocketMQ yang menyimpan dan mengirimkan pesan. Antrian juga merupakan unit penyimpanan terkecil untuk pesan ApsaraMQ for RocketMQ.
Semua topik dan topik ringan dalam ApsaraMQ for RocketMQ terdiri dari satu atau beberapa antrian. Arsitektur ini mendukung pemisahan horizontal antrian dan penyimpanan berbasis aliran di dalam setiap antrian.
Antrian memiliki tujuan utama berikut:
Penyimpanan terurut
Antrian secara inheren bersifat terurut. Pesan ditulis ke penyimpanan sesuai urutan kedatangannya di antrian, sehingga menciptakan urutan alami bagi pesan-pesan dalam antrian yang sama. Pesan paling awal berada di kepala antrian, sedangkan pesan terbaru berada di ekor antrian. Offset digunakan untuk menandai posisi dan urutan setiap pesan dalam antrian.
Semantik operasi berbasis aliran
Model penyimpanan berbasis antrian dari ApsaraMQ for RocketMQ memungkinkan Anda membaca sejumlah pesan apa pun dari offset mana pun. Hal ini memungkinkan fitur-fitur seperti pembacaan agregat dan pembacaan mundur (backtrack reads). Sistem perpesanan lain yang tidak menggunakan model penyimpanan berbasis antrian, seperti RabbitMQ dan ActiveMQ, tidak menyediakan fitur tersebut.
Hubungan model
Gambar berikut menunjukkan posisi dan alur antrian dalam model domain ApsaraMQ for RocketMQ:
Secara default, ApsaraMQ for RocketMQ menyediakan mekanisme penyimpanan pesan yang andal. Semua pesan yang berhasil dikirim disimpan secara persisten dalam sebuah antrian. Mekanisme ini, dikombinasikan dengan panggilan dari klien produsen dan konsumen, mencapai semantik pengiriman at-least-once.
Model antrian ApsaraMQ for RocketMQ mirip dengan model partisi Kafka. Dalam model perpesanan ApsaraMQ for RocketMQ, antrian merupakan komponen dari sebuah topik. Meskipun semua sumber daya pesan dikelola pada tingkat granularitas topik dan topik ringan, operasi aktual dilakukan pada antrian. Misalnya, produsen mengirim pesan ke topik tertentu, tetapi pesan tersebut dikirimkan ke antrian di dalam topik tersebut.
ApsaraMQ for RocketMQ menerapkan skalabilitas horizontal, baik untuk scaling out maupun scaling in, dengan mengubah jumlah antrian.
Properti internal
Batasan perilaku
Setiap topik dan topik ringan menggunakan satu atau beberapa antrian untuk menyimpan pesan. Jumlah antrian untuk setiap topik atau topik ringan bergantung pada jenis pesan dan wilayah tempat instans berada. Jumlah antrian tidak dapat diubah.
Kompatibilitas versi
Properti nama antrian berbeda-beda di berbagai versi layanan ApsaraMQ for RocketMQ:
Versi layanan 3.x dan 4.x: Nama antrian merupakan tripel {Nama Topik}+{ID Broker}+{ID Antrian} dan terikat pada node fisik.
Versi layanan 5.x: Nama antrian adalah string unik global yang ditetapkan oleh kluster dan dipisahkan dari node fisik.
Oleh karena itu, selama pengembangan, jangan membuat asumsi mengenai nama antrian atau mengikatnya ke operasi lain. Jika Anda membuat nama antrian secara manual dalam kode dan mengikatnya ke operasi lain, Anda mungkin mengalami masalah kompatibilitas di mana nama antrian tidak dapat diurai setelah peningkatan layanan.
Rekomendasi penggunaan
Tentukan jumlah antrian berdasarkan konsumsi bisnis
Untuk antrian ApsaraMQ for RocketMQ, ikuti prinsip menggunakan jumlah sekecil mungkin. Hindari peningkatan jumlah antrian secara sembarangan.
Jumlah antrian yang berlebihan dalam sebuah topik dapat menyebabkan masalah berikut:
Membengkaknya metadata kluster
ApsaraMQ for RocketMQ mengumpulkan metrik dan data pemantauan pada tingkat granularitas antrian. Jumlah antrian yang berlebihan dapat menyebabkan metadata lapisan kontrol membengkak.
Beban klien berlebihan
Dalam ApsaraMQ for RocketMQ, operasi baca dan tulis pesan dilakukan pada antrian. Jumlah antrian yang berlebihan dapat menghasilkan permintaan polling kosong, yang meningkatkan beban sistem.
Skema umum untuk menambah antrian
Tambah antrian untuk penyeimbangan beban node fisik
Dalam ApsaraMQ for RocketMQ, antrian suatu topik dapat didistribusikan ke berbagai node layanan. Setelah Anda melakukan skalabilitas horizontal kluster dengan menambahkan node, Anda dapat menambahkan antrian baru pada node layanan baru atau memigrasikan antrian lama ke node tersebut. Hal ini memastikan penyeimbangan beban lalu lintas kluster.
Tambah antrian untuk meningkatkan kinerja pesan terurut
Pada versi layanan 4.x ApsaraMQ for RocketMQ, urutan pesan hanya dijamin dalam satu antrian tunggal. Oleh karena itu, jumlah antrian memengaruhi konkurensi pesan terurut. Tambahkan jumlah antrian hanya ketika Anda menghadapi bottleneck kinerja sistem.
Penyeimbangan beban untuk konsumsi pesan tidak terurut tidak bergantung pada jumlah antrian
Untuk instans seri layanan ApsaraMQ for RocketMQ versi 5.x, penyeimbangan beban konsumen ditingkatkan ke tingkat granularitas pesan. Pesan dalam antrian yang sama dapat dikonsumsi secara merata oleh semua konsumen. Oleh karena itu, Anda tidak perlu khawatir jumlah antrian memengaruhi konkurensi konsumsi. Untuk informasi lebih lanjut tentang penyeimbangan beban, lihat Penyeimbangan beban konsumen.