全部产品
Search
文档中心

ApsaraMQ for RocketMQ:Kebijakan penyeimbangan beban untuk konsumen

更新时间:Jun 28, 2025

Saat konsumen dalam grup konsumen menarik pesan dari topik ApsaraMQ for RocketMQ, kebijakan penyeimbangan beban digunakan untuk menentukan cara alokasi pesan kepada konsumen. Kebijakan ini meningkatkan konkurensi layanan dan skalabilitas aplikasi. Topik ini menjelaskan kebijakan penyeimbangan beban yang disediakan oleh ApsaraMQ for RocketMQ untuk konsumen.

Informasi latar belakang

Memahami kebijakan penyeimbangan beban yang disediakan oleh ApsaraMQ for RocketMQ membantu Anda menentukan langkah-langkah yang tepat dalam skenario berikut:

  • Pemulihan bencana: Anda dapat menentukan cara pesan dicoba ulang dan dialihkan ketika node lokal gagal.

  • Pesan berurutan: Anda dapat lebih memahami bagaimana ApsaraMQ for RocketMQ memastikan urutan pesan first-in-first-out (FIFO) yang ketat.

  • Partisi horizontal: Anda dapat merencanakan migrasi lalu lintas dan operasi penskalaan horizontal berdasarkan cara pesan dialokasikan.

Konsumsi siaran dan konsumsi kluster

ApsaraMQ for RocketMQ memungkinkan beberapa grup konsumen untuk berlangganan pesan yang sama, dengan setiap grup konsumen menginisialisasi beberapa konsumen. Grup konsumen dan konsumen dapat dikonfigurasi untuk mengonsumsi pesan dalam skenario berikut:Consumption modes

  • Konsumsi Siaran di Seluruh Grup Konsumen: Skenario ini diilustrasikan di sisi kiri gambar sebelumnya. Setiap grup konsumen menginisialisasi konsumennya sendiri yang mengonsumsi semua pesan. Pesan dikirim ke beberapa subscriber dari topik dalam hubungan satu-ke-banyak.

    Mode ini biasanya digunakan dalam skenario seperti dorongan gateway dan dorongan konfigurasi.

  • Konsumsi Kluster dalam Grup Konsumen: Skenario ini diilustrasikan di sisi kanan gambar sebelumnya. Setiap grup konsumen menginisialisasi beberapa konsumen, dan pesan dikirim ke semua konsumen dalam grup. Mode ini berguna untuk menerapkan partisi lalu lintas horizontal dan penyeimbangan beban dalam grup.

    Mode ini cocok untuk pemisahan layanan mikro.

Pengantar kebijakan penyeimbangan beban untuk konsumen

Dalam skenario konsumsi siaran, penyeimbangan beban tidak diperlukan karena setiap grup konsumen hanya berisi satu konsumen.

Namun, dalam skenario konsumsi kluster, setiap grup konsumen berisi beberapa konsumen. Kebijakan penyeimbangan beban membantu menentukan cara alokasi pesan.

Berdasarkan jenis konsumen, kebijakan penyeimbangan beban dibagi menjadi dua jenis:

Penyeimbangan beban berbasis pesan

Ruang lingkup penggunaan

Penyeimbangan beban berbasis pesan adalah satu-satunya dan kebijakan default untuk konsumen push dan konsumen sederhana.

Mekanisme kerja

Penyeimbangan beban berbasis pesan secara merata mengalokasikan pesan dalam topik ke beberapa konsumen dalam grup konsumen.

Message-based load balancing

Seperti ditunjukkan pada gambar sebelumnya, Consumer Group A terdiri dari tiga konsumen: A1, A2, dan A3. Ketiga konsumen ini mengonsumsi pesan Queue1 dalam topik.

Penting

Penyeimbangan beban berbasis pesan memastikan bahwa pesan dalam antrian diproses secara bersamaan oleh beberapa konsumen. Namun, pesan dikirim secara acak ke konsumen, sehingga Anda tidak dapat menentukan cara alokasi pesan ke konsumen.

Penyeimbangan beban berbasis pesan didasarkan pada semantik pengakuan pesan tunggal dalam topik. Setelah konsumen menerima pesan, broker mengunci pesan untuk memastikan bahwa pesan tersebut tidak terlihat oleh konsumen lain sampai dikonsumsi atau habis waktu. Ini mencegah pesan dari antrian yang sama dikonsumsi berkali-kali oleh konsumen yang berbeda.

Kebijakan beban untuk pesan terurut

Dalam pesan terurut, urutan pesan mengacu pada urutan beberapa pesan dalam grup pesan. Pesan-pesan ini harus diproses dalam urutan yang persis sama seperti yang disimpan di broker. Oleh karena itu, penyeimbangan beban berbasis pesan perlu memastikan bahwa pesan dalam grup pesan dikonsumsi dalam urutan yang sama seperti yang disimpan di server. Saat konsumen yang berbeda memproses pesan dalam grup yang sama, sistem mengunci pesan secara ketat sesuai dengan urutan pesan untuk memastikan pesan dikonsumsi secara berurutan.

Load policy for ordered messages

Pada gambar sebelumnya, ada empat pesan terurut dalam grup pesan G1 dari Queue1. Urutan penyimpanannya diwakili oleh M1 hingga M4. Selama konsumsi, ketika pesan M1 dan M2 diproses oleh konsumen A1, konsumen A2 tidak dapat mengonsumsi pesan M3 dan M4 secara paralel jika status konsumsi untuk M1 dan M2 belum diserahkan. Konsumen hanya dapat mengonsumsi pesan ketika status konsumsi untuk pesan sebelumnya telah diserahkan.

Fitur

Dibandingkan dengan penyeimbangan beban berbasis antrian, penyeimbangan beban berbasis pesan memiliki fitur-fitur berikut:

  • Alokasi konsumsi lebih seimbang

    Dalam penyeimbangan beban berbasis antrian konvensional, jumlah antrian dan jumlah konsumen mungkin tidak seimbang dengan baik. Ini menghasilkan sistem di mana beberapa konsumen mungkin menganggur sementara beberapa konsumen lainnya kelebihan beban. Sebaliknya, penyeimbangan beban berbasis pesan memastikan penyeimbangan beban yang merata di antara konsumen tanpa memerlukan Anda untuk mengelola jumlah antrian dan konsumen.

  • Lebih toleran terhadap perbedaan kapasitas jaringan

    Dalam lingkungan produksi online, kemampuan pemrosesan konsumen mungkin berbeda karena kondisi jaringan aktual atau spesifikasi perangkat keras jaringan yang tidak konsisten. Jika pesan dialokasikan berdasarkan antrian, mungkin ada kasus di mana beberapa konsumen memiliki pesan yang menumpuk sementara konsumen lainnya menganggur. Sebaliknya, penyeimbangan beban berbasis pesan mengalokasikan pesan sesuai permintaan untuk mencapai distribusi beban yang lebih seimbang di antara konsumen.

  • O&M lebih mudah untuk alokasi antrian

    Dalam skenario di mana penyeimbangan beban berbasis antrian konvensional digunakan, Anda harus memastikan bahwa jumlah antrian lebih besar atau sama dengan jumlah konsumen untuk memastikan tidak ada konsumen yang menganggur. Masalah ini tidak ada dengan penyeimbangan beban berbasis pesan.

Skenario

Karena pesan dalam antrian dialokasikan secara diskrit ke konsumen, penyeimbangan beban berbasis pesan cocok untuk sebagian besar skenario penanganan acara online. Dalam skenario ini, konsumen hanya memerlukan kemampuan pemrosesan dasar alih-alih agregasi batch pesan. Adapun skenario seperti pemrosesan aliran dan komputasi agregasi di mana agregasi dan pemrosesan batch pesan diperlukan, penyeimbangan beban berbasis antrian adalah pilihan yang lebih baik.

Contoh

Konsumen tidak perlu melakukan konfigurasi tambahan untuk penyeimbangan beban berbasis pesan. Secara default, kebijakan ini diaktifkan untuk konsumen push dan konsumen sederhana.

SimpleConsumer simpleConsumer = null;
        // Contoh konsumsi 1: Saat konsumen push mengonsumsi pesan normal, mereka hanya perlu memproses pesan pada pendengar pesan dan tidak perlu mempertimbangkan penyeimbangan beban.
        MessageListener messageListener = new MessageListener() {
            @Override
            public ConsumeResult consume(MessageView messageView) {
                System.out.println(messageView);
                // Mengembalikan status berdasarkan hasil konsumsi.
                return ConsumeResult.SUCCESS;
            }
        };

        // Contoh konsumsi 2: Saat konsumen sederhana mengonsumsi pesan normal, mereka mendapatkan dan menyerahkan pesan. Konsumen mendapatkan pesan berdasarkan topik yang dilanggan dan tidak perlu mempertimbangkan penyeimbangan beban.
        List<MessageView> messageViewList = null;
        try {
            messageViewList = simpleConsumer.receive(10, Duration.ofSeconds(30));
            messageViewList.forEach(messageView -> {
                System.out.println(messageView);
                // Setelah konsumsi selesai, konsumen harus memanggil ACK untuk menyerahkan hasil konsumsi.
                try {
                    simpleConsumer.ack(messageView);
                } catch (ClientException e) {
                    e.printStackTrace();
                }
            });
        } catch (ClientException e) {
            // Jika tarikan gagal karena pembatasan lalu lintas sistem atau alasan lainnya, konsumen harus mengajukan ulang permintaan untuk mendapatkan pesan.
            e.printStackTrace();
        }


            

Penyeimbangan beban berbasis antrian

Ruang lingkup penggunaan

Untuk konsumen versi broker 4.x dan 3.x, termasuk konsumen pull, konsumen push default, konsumen pull default, dan konsumen pull ringan, hanya penyeimbangan beban berbasis antrian yang dapat digunakan.

Mekanisme kerja

Dalam kebijakan penyeimbangan beban berbasis antrian, konsumen dalam grup konsumen yang sama mengonsumsi pesan dalam antrian yang dialokasikan kepada mereka. Setiap antrian dikonsumsi oleh satu konsumen.

Queue-based load balancing policy

Seperti ditunjukkan pada gambar sebelumnya, tiga antrian (Queue1, Queue2, dan Queue3) dalam topik dialokasikan ke dua konsumen dalam grup konsumen. Karena setiap antrian hanya dapat dialokasikan ke satu konsumen, konsumen A2 dialokasikan dua antrian. Jika jumlah antrian kurang dari jumlah konsumen, beberapa konsumen tidak akan memiliki antrian yang dialokasikan kepada mereka.

Penyeimbangan beban berbasis antrian mengalokasikan pesan berdasarkan data operasi seperti jumlah antrian dan jumlah konsumen. Setiap antrian terikat pada konsumen tertentu. Kemudian, setiap konsumen memproses pesan sesuai dengan semantik konsumsi mendapatkan pesan > menyerahkan offset > menyimpan offset. Status konsumsi tidak dikembalikan ke antrian ketika konsumen mendapatkan pesan. Oleh karena itu, untuk menghindari konsumsi pesan berulang kali oleh beberapa konsumen, setiap antrian hanya dapat dikonsumsi oleh satu konsumen.

Penting

Penyeimbangan beban berbasis antrian menjamin bahwa antrian diproses oleh hanya satu konsumen. Namun, implementasi kebijakan ini bergantung pada mekanisme negosiasi informasi antara konsumen dan broker. ApsaraMQ for RocketMQ tidak menjamin bahwa pesan dalam antrian diproses oleh hanya satu konsumen. Oleh karena itu, ketika jumlah konsumen dan jumlah antrian berubah, ketidaksesuaian sementara dalam alokasi antrian mungkin terjadi, yang menyebabkan sejumlah kecil pesan diproses lebih dari sekali.

Fitur

Dibandingkan dengan penyeimbangan beban berbasis pesan, granularitas penyeimbangan beban berbasis antrian lebih besar dan kurang fleksibel. Namun, penyeimbangan beban berbasis antrian ideal untuk skenario pemrosesan aliran. Ini memastikan bahwa pesan dalam antrian diproses oleh satu konsumen. Oleh karena itu, penyeimbangan beban berbasis antrian lebih cocok untuk skenario di mana Anda ingin memproses pesan teragregasi atau pesan dalam batch.

Skenario

Penyeimbangan beban berbasis antrian berlaku untuk skenario di mana Anda ingin memproses pesan teragregasi atau pesan dalam batch. Ini adalah skenario umum dalam aplikasi komputasi aliran dan agregasi data.

Contoh

Konsumen tidak perlu melakukan konfigurasi tambahan untuk penyeimbangan beban berbasis antrian. Secara default, kebijakan ini diaktifkan untuk konsumen pull versi broker 4.x dan 3.x.

Untuk informasi lebih lanjut tentang kode contoh, kunjungi perpustakaan kode Apache RocketMQ.

Kompatibilitas versi

Kebijakan penyeimbangan beban berbasis pesan tersedia mulai versi broker 5.0 dari ApsaraMQ for RocketMQ. Untuk versi broker 4.x dan 3.x, hanya kebijakan penyeimbangan beban berbasis antrian yang tersedia.

Baik kebijakan penyeimbangan beban berbasis pesan maupun berbasis antrian tersedia untuk versi broker 5.x dari ApsaraMQ for RocketMQ. Kebijakan mana yang efektif tergantung pada versi klien dan jenis konsumen.

Catatan penggunaan

Implementasikan idempotensi pesan untuk logika konsumsi.

Baik kebijakan penyeimbangan beban berbasis pesan maupun berbasis antrian memicu penyeimbangan ulang sementara dalam skenario seperti menambahkan konsumen, menghapus konsumen, dan penskalaan broker. Ini dapat menyebabkan ketidaksesuaian beban sementara dan mengakibatkan sejumlah kecil pesan dikonsumsi lebih dari sekali. Oleh karena itu, deduplikasi diperlukan untuk memastikan idempotensi untuk konsumsi pesan.