All Products
Search
Document Center

ApsaraMQ for RocketMQ:Penyeimbangan beban untuk produsen

Last Updated:Nov 10, 2025

Saat produsen mengirim pesan ke layanan ApsaraMQ for RocketMQ, ApsaraMQ for RocketMQ menggunakan kebijakan penyeimbangan beban untuk mendistribusikan pesan secara merata ke beberapa antrian, sehingga mencegah terjadinya antrian hot spot dan bottleneck kinerja. Topik ini menjelaskan kebijakan penyeimbangan beban produsen untuk ApsaraMQ for RocketMQ.

Informasi latar belakang

Memahami kebijakan penyeimbangan beban yang disediakan oleh ApsaraMQ for RocketMQ dapat membantu Anda menentukan langkah-langkah yang tepat dalam skenario berikut:
  • Pemulihan bencana: Anda dapat menentukan cara pengalihan pesan saat node lokal mengalami kegagalan.
  • Pengurutan pesan: Anda dapat lebih memahami bagaimana ApsaraMQ for RocketMQ memastikan pengurutan pesan first-in-first-out yang ketat.
  • Penyeimbangan beban: Anda dapat memahami pola distribusi pesan di berbagai node serta mengonfigurasi solusi migrasi lalu lintas dan penskalaan yang sesuai.

Round robin

Cakupan penggunaan

Penyeimbangan beban round-robin merupakan kebijakan penyeimbangan beban default dan satu-satunya kebijakan yang didukung untuk pesan tidak terurut (pesan normal, terjadwal, dan transaksional) di ApsaraMQ for RocketMQ.

Cara kerja kebijakan

Dalam penyeimbangan beban round-robin, produsen mengirim pesan ke semua antrian dalam topik tertentu secara bergiliran untuk memastikan distribusi pesan yang merata ke seluruh antrian dalam topik tersebut.

Load balancing policy for producers

Pada gambar di atas, Antrian 1, Antrian 2, dan Antrian 3 adalah antrian dalam topik tersebut, sedangkan kombinasi huruf M dan angka menunjukkan pesan yang dikirim secara berurutan.

Produsen mengirim pesan ke antrian secara bergiliran: pesan pertama M1 ke Antrian 1, pesan kedua M2 ke Antrian 2, dan pesan ketiga M3 ke Antrian 3, lalu mengulangi pola distribusi tersebut hingga semua pesan terkirim.

Penanganan pengecualian

Jika pengiriman pesan gagal, ApsaraMQ for RocketMQ akan menganalisis penyebab kegagalan tersebut. Berdasarkan analisis tersebut, sistem dapat sementara melewati node yang berisi antrian gagal saat memilih tujuan, sehingga menyediakan isolasi kesalahan otomatis.

Fitur

Penyeimbangan beban round-robin hanya didukung untuk pesan tidak terurut dan memastikan distribusi pesan yang merata guna memaksimalkan kinerja topik.

Contoh

Mode RoundRobin merupakan mode default untuk pesan non-sekuensial dan tidak memerlukan pengaturan tambahan.

// Secara default, penyeimbangan beban round-robin diaktifkan untuk pesan normal. 

        // Kirim pesan normal. 
        MessageBuilder messageBuilder = null;
        for (int i = 0; i < 10; i++) {
            // Anda tidak perlu mengonfigurasi penyeimbangan beban round-robin untuk mengirimkan pesan normal. SDK telah menyertakan logika yang diperlukan untuk melakukan pengiriman pesan secara round-robin agar pesan didistribusikan secara merata. 
            Message message = messageBuilder.setTopic("normalTopic")
                    // Tentukan kunci indeks pesan agar sistem dapat menggunakan kata kunci untuk menemukan pesan secara akurat. 
                    .setKeys("messageKey")
                    // Tentukan tag pesan agar konsumen dapat memfilter pesan berdasarkan tag tersebut. 
                    .setTag("messageTag")
                    // Konfigurasikan isi pesan. 
                    .setBody("messageBody".getBytes())
                    .build();
            try {
                // Kirim pesan. Fokus pada hasil pengiriman pesan dan pengecualian seperti kegagalan. 
                SendReceipt sendReceipt = producer.send(message);
                System.out.println(sendReceipt.getMessageId());
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }


         

MessageGroupHash

Cakupan penggunaan

Penyeimbangan beban berbasis MessageGroupHash merupakan kebijakan penyeimbangan beban default dan satu-satunya kebijakan yang didukung untuk pesan terurut di ApsaraMQ for RocketMQ.

Prinsip kebijakan: Algoritma hash

Penyeimbangan beban berbasis MessageGroupHash menggunakan algoritma SipHash untuk mendistribusikan pesan. Dalam mode ini, produsen mengirim pesan dalam grup pesan yang sama ke antrian yang sama berdasarkan algoritma SipHash bawaan, sehingga memastikan bahwa pesan dalam satu grup pesan disimpan dalam antrian sesuai urutan pengirimannya.

Catatan Untuk informasi selengkapnya, lihat SipHash.
SipHash algorithm-based distribution

Pada gambar di atas, G1-M1 adalah pesan pertama dalam MessageGroup 1, G1-M2 adalah pesan kedua, dan G1-M3 adalah pesan ketiga. Produsen mengirim pesan-pesan tersebut ke antrian yang sama (MessageQueue 1) dan memastikan ketiganya disimpan dalam antrian sesuai urutan pengirimannya.

Fitur

Penyeimbangan beban berbasis MessageGroupHash hanya didukung untuk pesan terurut dan memastikan pengiriman pesan secara terurut dalam satu grup pesan.

Jika jumlah pesan di beberapa grup pesan sangat berbeda, penyeimbangan beban berbasis MessageGroupHash tidak dapat menjamin distribusi pesan yang merata maupun penskalaan kinerja. Dalam skenario tertentu, sebagian besar pesan dapat tersimpan hanya di sejumlah kecil antrian. Untuk menghindarinya, kami menyarankan agar Anda mendistribusikan pesan ke beberapa grup pesan sehingga tidak terkonsentrasi pada sejumlah kecil grup saja.

Contoh

Secara default, penyeimbangan beban berbasis MessageGroupHash diaktifkan untuk pesan terurut. Contoh kode berikut menunjukkan penerapan penyeimbangan beban berbasis MessageGroupHash:

// Secara default, penyeimbangan beban berbasis MessageGroupHash diaktifkan untuk pesan terurut. 

for (int i = 0; i < 10; i++) {
            Message message = messageBuilder.setTopic("fifoTopic")
                    // Tentukan kunci indeks pesan agar sistem dapat menggunakan kata kunci untuk menemukan pesan secara akurat. 
                    .setKeys("messageKey")
                    // Tentukan tag pesan agar konsumen dapat memfilter pesan berdasarkan tag yang ditentukan. 
                    .setTag("messageTag")
                    // Konfigurasikan MessageGroup. Pesan dalam grup pesan yang sama didistribusikan ke antrian yang sama berdasarkan algoritma SipHash. 
                    .setMessageGroup("fifoGroupA")
                    // Konfigurasikan isi pesan. 
                    .setBody("messageBody".getBytes())
                    .build();
            try {
                // Kirim pesan. Fokus pada hasil pengiriman pesan dan pengecualian seperti kegagalan. 
                SendReceipt sendReceipt = producer.send(message);
                System.out.println(sendReceipt.getMessageId());
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }

Kompatibilitas versi

  • Mode MessageGroupHash

    Kebijakan penyeimbangan beban MessageGroupHash didukung mulai dari versi server ApsaraMQ for RocketMQ 5.x. Versi sebelumnya, seperti 4.x dan 3.x, tidak mendukung kebijakan ini.

    Oleh karena itu, jika Anda meningkatkan mekanisme pengiriman pesan terurut dari versi 4.x atau 3.x ke 5.x, Anda harus mengambil langkah-langkah untuk memastikan pengurutan pesan tetap terjaga. Misalnya, Anda dapat mengonsumsi semua pesan dalam topik sebelum beralih ke versi 5.x.

  • Mode round-robin

    Kebijakan penyeimbangan beban round-robin didukung oleh versi server 5.x, 4.x, dan 3.x serta tidak memiliki masalah kompatibilitas.

Catatan penggunaan

Hindari kelebihan beban pada antrian saat menggunakan penyeimbangan beban berbasis MessageGroupHash

Dalam mode MessageGroupHash, ApsaraMQ for RocketMQ menjamin bahwa pesan dari grup pesan yang sama dikirim ke antrian yang sama. Jika logika bisnis Anda mengkonsentrasikan pesan hanya ke beberapa grup pesan, layanan ini juga akan menyimpan pesan-pesan tersebut hanya di beberapa antrian. Hal ini dapat meningkatkan tekanan penyimpanan, menyebabkan hot spot pada antrian, dan membatasi kemampuan topik untuk diskalakan.

Kami menyarankan agar Anda mendistribusikan pesan ke beberapa grup pesan. Sebagai contoh, dalam skenario e-commerce, Anda dapat menggunakan ID pesanan dan nama pengguna sebagai kunci grup pesan untuk memastikan pesan didistribusikan ke berbagai grup pesan, sekaligus memproses pesan spesifik pengguna secara terurut.

Hindari mengirim pesan ke satu antrian saja

Untuk memastikan penskalaan kinerja dan pemulihan bencana, kami menyarankan agar Anda menggunakan lebih dari satu antrian untuk penyeimbangan beban, baik untuk pesan terurut maupun tidak terurut. Jika suatu topik hanya berisi satu antrian, pesan akan dikirim hanya ke antrian tersebut, terlepas dari kebijakan penyeimbangan beban yang digunakan. Hal ini dapat menyebabkan bottleneck kinerja dan mengganggu pemulihan bencana.