Tüm Ürünler
Search
Belge Merkezi

ApsaraMQ for RocketMQ:Consumer load balancing

Son Güncelleme:Oct 04, 2026

Bir tüketici grubundaki birden fazla tüketici bir konudan mesajları çektiğinde, ApsaraMQ for RocketMQ bu mesajları bir yük dengeleme ilkesi kullanarak tüketiciler arasında dağıtır. Bu yaklaşım aktarım hızını artırır ve yatay ölçeklendirmeyi basitleştirir.

Bir yük dengeleme ilkesi seçin

ApsaraMQ for RocketMQ iki farklı yük dengeleme ilkesi sunar. Hangi ilkenin uygulanacağı, tüketici türüne ve broker sürümüne bağlıdır.

İlke Varsayılan olarak uygulandığı tüketici Granülerlik En uygun olduğu senaryolar
Mesaj tabanlı Push Consumer, Simple Consumer (broker 5.x) Tekil mesajlar Her mesajın bağımsız olarak işlendiği olay güdümlü iş yükleri
Kuyruk tabanlı Pull Consumer (broker 3.x/4.x/5.x) Tam kuyruklar Akış işleme ve toplu iş birleştirme iş yükleri
İpucu: Tüketicileriniz mesajları tek tek işliyorsa, mesaj tabanlı yük dengeleme daha dengeli bir dağılım ve daha basit işletim sağlar. Tüketicileriniz tek bir kaynaktan gelen mesajları toplu halde veya gruplayarak işliyorsa kuyruk tabanlı yük dengelemeyi kullanın.

Arka plan

Bu ilkeleri anlamak aşağıdaki konularda planlama yapmanıza yardımcı olur:

  • Olağanüstü durum kurtarma -- yerel düğümler arızalandığında mesajların nasıl yeniden denendiği ve yük devretmenin nasıl çalıştığı.

  • Mesaj sıralaması -- ApsaraMQ for RocketMQ'nun bir mesaj grubu içinde katı ilk giren ilk çıkar (FIFO) sırasını nasıl koruduğu.

  • Yatay ölçeklendirme -- tüketici eklerken veya kaldırırken trafik geçişini ve yatay ölçeklendirmeyi nasıl planlayacağınız.

Yayın tüketimi ile küme tüketimi karşılaştırması

ApsaraMQ for RocketMQ iki tüketim modunu destekler. Yük dengeleme yalnızca küme tüketimi için geçerlidir.

Mod Gruptaki tüketici sayısı Mesaj teslimi Kullanım durumu Yük dengeleme
Yayın Grup başına bir Her grup tüm mesajları alır Ağ geçidi itme, yapılandırma itme Uygulanamaz
Küme Grup başına birden fazla Her mesaj tek bir tüketiciye gider Mikroservis gevşek bağlantısı, yatay ölçeklendirme Mesaj tabanlı veya kuyruk tabanlı

Consumption modes

  • Yayın tüketimi (diyagramın sol tarafı): Her tüketici grubunda tüm mesajları alan tek bir tüketici bulunur. Farklı tüketici grupları mesaj akışının tamamını bağımsız olarak alır.

  • Küme tüketimi (diyagramın sağ tarafı): Bir tüketici grubunda birden fazla tüketici bulunur ve mesajlar bunlar arasında dağıtılır. Grupta her mesajı yalnızca bir tüketici işler.

Mesaj tabanlı yük dengeleme

Nasıl çalışır

Broker, mesajların hangi kuyruğa ait olduğundan bağımsız olarak, bir konudaki tekil mesajları bir tüketici grubundaki tüm tüketiciler arasında eşit şekilde dağıtır. Birden fazla tüketici aynı kuyruktaki mesajları eş zamanlı olarak işleyebilir.

Message-based load balancing

Bu örnekte, Tüketici Grubu A'da A1, A2 ve A3 adlı üç tüketici bulunur. Üçü de Queue1'den mesajları tüketir. Broker her mesajı tek seferde bir tüketiciye atar.

Bir tüketici bir mesaj aldığında, broker bu mesajı kilitler; böylece mesaj diğer tüketiciler için görünmez hale gelir. Mesaj, tüketici onaylayana veya kilidin süresi dolana kadar kilitli kalır. Bu mekanizma, normal koşullar altında yinelenen işlemeyi önler.

Önemli

Mesajlar önceden atanmak yerine talebe göre dağıtılır. Belirli bir mesajı hangi tüketicinin alacağını kontrol edemezsiniz.

Sıralı mesaj işleme

Sıralı mesajlar için ApsaraMQ for RocketMQ, aynı mesaj grubundaki mesajların broker üzerinde depolandıkları sırayla birebir aynı şekilde işlenmesini garanti eder.

Ordered message handling

Queue1'in G1 mesaj grubundaki dört sıralı mesajı (M1'den M4'e) düşünün. A1 tüketici M1 ve M2'yi işliyorsa, A1 M1 ve M2 için tüketim durumunu gönderene kadar A2 tüketici M3 veya M4'ü işlemeye başlayamaz. Broker, sıralamayı korumak için katı ardışık kilitleme uygular.

Kuyruk tabanlı yük dengelemeye göre avantajları

Avantaj Nasıl çalışır Neden önemlidir
Dengeli dağılım Mesajlar talebe göre tahsis edildiğinden tüm tüketiciler meşgul kalır. Kuyruk tabanlı dengelemede, kuyruk ve tüketici sayıları arasındaki uyumsuzluk bazı tüketicilerin boşta kalmasına neden olabilir.
Eşit olmayan kapasiteye tolerans Daha yavaş tüketiciler otomatik olarak daha az mesaj alır. Kuyruk tabanlı dengelemede, ağ koşulları veya donanım teknik özelliklerindeki farklar nedeniyle yoğun bir kuyruk atanan yavaş bir tüketici birikim oluştururken diğer tüketiciler boşta kalabilir.
Daha basit kapasite planlaması Kuyruk sayısını tüketici sayısına eşitleme gereği yoktur. Kuyruk sayısını ayarlamadan tüketicileri serbestçe ekleyip kaldırabilirsiniz.

Ne zaman kullanılır

Mesaj tabanlı yük dengeleme, her mesajın bağımsız olarak ele alındığı çoğu çevrimiçi olay işleme iş yükü için uygundur; örneğin sipariş işleme, bildirim dağıtımı ve gerçek zamanlı olay işleme.

Aynı kuyruktaki mesajları toplu işlemeyi gerektiren akış işleme veya birleştirme iş yükleri için bunun yerine kuyruk tabanlı yük dengelemeyi kullanın.

Kapsam

Mesaj tabanlı yük dengeleme, broker sürümü 5.x üzerindeki Push Consumer ve Simple Consumer türleri için kullanılabilen tek ilkedir. Varsayılan olarak etkindir ve ek yapılandırma gerektirmez.

Örnek

Push Consumer ve Simple Consumer türleri mesaj tabanlı yük dengelemeyi otomatik olarak kullanır. Aşağıdaki Java örnekleri, herhangi bir yük dengeleme yapılandırması olmadan her iki tüketici türünün de mesajları nasıl işlediğini gösterir.

Mesaj dinleyicili Push Consumer:

// Push Consumer: implement a message listener to process messages.
// Load balancing is handled automatically by the broker.
MessageListener messageListener = new MessageListener() {
    @Override
    public ConsumeResult consume(MessageView messageView) {
        System.out.println(messageView);
        // Return the consumption result.
        return ConsumeResult.SUCCESS;
    }
};

Manuel onaylamalı Simple Consumer:

// Simple Consumer: pull messages, process them, and acknowledge each one.
// Load balancing is handled automatically by the broker.
try {
    List<MessageView> messageViewList = simpleConsumer.receive(10, Duration.ofSeconds(30));
    messageViewList.forEach(messageView -> {
        System.out.println(messageView);
        try {
            // Acknowledge the message after processing.
            simpleConsumer.ack(messageView);
        } catch (ClientException e) {
            e.printStackTrace();
        }
    });
} catch (ClientException e) {
    // If the pull fails due to throttling or other issues, retry the request.
    e.printStackTrace();
}

Kuyruk tabanlı yük dengeleme

Nasıl çalışır

Broker, bir konudaki her kuyruğu tüketici grubundaki tam olarak bir tüketiciye atar. Her tüketici daha sonra kendisine atanan kuyruklardaki tüm mesajları işler.

Queue-based load balancing

Bu örnekte bir konuda üç kuyruk (Queue1, Queue2, Queue3) bulunur ve tüketici grubunda iki tüketici vardır. Her kuyruk bir tüketiciye atandığından, A2 tüketici iki kuyruk alırken A1 sadece bir kuyruk alır. Kuyruk sayısı tüketici sayısından azsa, bazı tüketicilere kuyruk atanmaz ve boşta kalırlar.

Her tüketici şu işleme sırasını izler: atanan kuyruktan mesajları çeker, tüketim ofsetini gönderir ve ofseti kalıcı hale getirir. Tüketici mesajları çekerken tüketim durumu kuyruğa iade edilmediğinden, yinelenen işlemeyi önlemek için her kuyruk tek bir tüketiciye özel olarak atanmalıdır.

Önemli

Kuyruk tabanlı yük dengeleme, her kuyruğun tek bir tüketici tarafından işlenmesi için tasarlanmıştır. Ancak uygulama, tüketici ile broker arasındaki bilgi uzlaşma mekanizmasına bağlıdır. ApsaraMQ for RocketMQ, bir kuyruktaki mesajların yalnızca bir tüketici tarafından işleneceğini garanti etmez. Tüketici veya kuyruk sayıları değiştiğinde, kuyruk atamasında geçici tutarsızlıklar ortaya çıkabilir ve az sayıda mesaj birden fazla kez işlenebilir. Her zaman yedimsiz mesaj işleme uygulayın.

Mesaj tabanlı yük dengelemeye göre avantajları

Avantaj Nasıl çalışır Neden önemlidir
Kuyruk yakınlığı Bir kuyruktaki tüm mesajlar aynı tüketiciye gider. Tek bir tüketici içinde yerel birleştirme ve toplu işlemeyi mümkün kılar.
Akış işleme desteği Tüketiciler aynı kuyruktan gelen sürekli bir akış üzerinde durum bilgisi içeren işlemeyi sürdürür. Zaman pencereli hesaplamaları ve çalışan toplamaları destekler.

Ne zaman kullanılır

Kuyruk tabanlı yük dengeleme, aynı kaynaktan gelen mesajları toplu işlemesi veya birleştirmesi gereken akış bilişim ve veri birleştirme uygulamaları için en iyisidir. Örneğin, bir tüketici belirli bir zaman penceresi boyunca tek bir kuyruktan ölçümleri toplayıp çalışan ortalamaları hesaplayabilir.

Kapsam

Kuyruk tabanlı yük dengeleme, Pull Consumer, varsayılan Push Consumer, varsayılan Pull Consumer ve Lite Pull Consumer türleri dahil olmak üzere broker sürümleri 3.x ve 4.x üzerindeki tüketiciler için kullanılabilen tek ilkedir. Broker sürümü 5.x'te Pull Consumer türleri varsayılan olarak kuyruk tabanlı yük dengelemeyi kullanmaya devam eder.

Ek yapılandırma gerekmez; kuyruk tabanlı yük dengeleme bu tüketici türleri için otomatik olarak etkinleştirilir.

Örnek

Örnek kod için Apache RocketMQ kod kitaplığındaki LitePullConsumerAssign.java dosyasına bakın.

Sürüm uyumluluğu

Broker sürümü Kullanılabilir ilkeler Notlar
3.x, 4.x Yalnızca kuyruk tabanlı Tüm tüketici türleri kuyruk tabanlı yük dengeleme kullanır.
5.x Hem mesaj tabanlı hem kuyruk tabanlı Push Consumer ve Simple Consumer varsayılan olarak mesaj tabanlı kullanır. Pull Consumer varsayılan olarak kuyruk tabanlı kullanır.

Mesaj tabanlı yük dengeleme ilkesi broker sürüm 5,0 ile tanıtıldı. Broker sürüm 5.x çalıştırıyorsanız, aktif ilke istemci sürümüne ve tüketici türüne bağlıdır.

Kullanım notları

Yedimsiz mesaj işleme uygulayın

Her iki yük dengeleme ilkesi de tüketiciler eklendiğinde, kaldırıldığında veya broker ölçeklendiğinde geçici yeniden dengelemeyi tetikler. Yeniden dengeleme sırasında az sayıda mesaj birden fazla kez teslim edilebilir. Bunu yönetmek için mesaj tüketim mantığınızda yedimsizliği sağlamak amacıyla yinelenenleri kaldırma uygulayın.