Tüketici ofsetini sıfırlamak, abonenin mevcut tüketim konumunu değiştirir. Bir tüketici başarısız olursa veya hatalı verileri işlerse, tüketici ofsetini sıfırlayarak önceki bir konuma dönebilir ve tüketimi yeniden başlatabilirsiniz. Alternatif olarak, biriken mesajları geçici olarak atlamak için tüketim konumunu en son ofsete taşıyabilirsiniz.
Arka plan bilgileri
ApsaraMQ for RocketMQ mesaj tüketim ilerlemesini yönetmek için tüketici ofsetlerini kullanır. Tüketici bir mesajı işledikten sonra mesaj kuyruktan hemen silinmez. ApsaraMQ for RocketMQ her grup için bir tüketim kaydı tutar. Tüketici ofseti olarak bilinen bu kayıt, gruptaki tüketicilerin belirli bir konu için tükettiği en son mesajın ofsetini belirtir.
Bir tüketici istemcisi çevrimdışı duruma geçip ardından tekrar çevrimiçi olduğunda sunucu tarafında kaydedilen tüketim ilerlemesine göre mesaj işlemeye devam eder.
Tüketim anormal olduğunda veya mevcut tüketici ofseti yanlışsa tüketici ofsetini sıfırlayarak tüketim ilerlemesini ayarlayabilirsiniz.
ApsaraMQ for RocketMQ tüketici ofsetlerini aşağıdaki yöntemlerle sıfırlamayı destekler:
-
Start Consumption from Latest Offset
Belirli bir konudaki mesajları işleyen tüketiciler biriken tüm mesajları atlar ve sıfırlama işleminden sonra gönderilen en son mesajdan itibaren tüketimi başlatır.
-
Start Consumption from Offset Corresponding to Specified Point in Time
Tüketiciler daha önce tüketilip tüketilmediğine bakılmaksızın belirtilen zamana karşılık gelen tüketici ofsetinden başlayarak mesajları işler.
Seçilebilir zaman aralığı konuda depolanan en eski ve en yeni mesajların oluşturulma zamanları arasındadır.
Belirli bir zamandaki tüketici ofsetine sıfırladığınızda sunucu tarafı otomatik olarak en yakın eşleşen tüketici ofsetini bulur.
Senaryolar
Mesaj birikmesini temizleme: Aşağı yönlü bir tüketim sisteminin performansı yetersizse veya tüketim hızı üretim hızından daha yavaşsa çok sayıda mesaj birikebilir. Bu biriken mesajlar atılabilir durumdaysa tüketici ofsetini belirtilen bir konuma sıfırlayabilirsiniz. Böylece biriken mesajları atlayabilir ve aşağı yönlü sistem üzerindeki işlem yükünü azaltabilirsiniz.
Düzeltici işleme için geriye dönük izleme: Tüketim iş mantığı anormal ise ve mesajlar hatalı işleniyorsa bu mesajların yeniden tüketilmesi gerekebilir. Bunun için tüketici ofsetini geçmiş bir konuma sıfırlayabilirsiniz. Bu işlem tüketimin geriye doğru izlenmesini sağlar.
Kullanım notları
Tüketici ofsetini sıfırlama işlemi hedef konu için belirtilen grubun tüketici ofsetine uygulanır. Aynı konuya abone olan diğer grupların tüketim ilerlemesini etkilemez.
Yayın (broadcasting) tüketim modunda tüketici ofsetlerinin sıfırlanması desteklenmez.
ApsaraMQ for RocketMQ yalnızca TCP protokolünü kullanan gruplar için tüketici ofsetlerinin sıfırlanmasını destekler; HTTP protokolünü kullanan grupları desteklemez.
Tüketici ofsetini sıfırlama özelliği yalnızca tüketiciler tarafından görülebilir durumdaki mesajları sıfırlar. Zamanlanmış mesajları veya yeniden deneme bekleyen mesajları sıfırlayamaz.
Tüketici ofsetlerini yalnızca tüketiciler çevrimiçi durumdayken sıfırlayabilirsiniz.
Yordam
ApsaraMQ for RocketMQ konsoluna giriş yapın. Sol gezinme bölmesinde Instances öğesini tıklayın.
Üst gezinme çubuğunda China (Hangzhou) gibi bir bölge seçin. Instances sayfasında yönetmek istediğiniz örneğin adını tıklayın.
Soldaki gezinme bölmesinde Groups öğesini tıklayın. Ardından TCP sekmesini tıklayın.
Tüketici ofsetini sıfırlamak istediğiniz grup kimliğini bulun. Actions sütununda More öğesini tıklayın ve açılır menüden Reset Consumer Offset seçeneğini belirleyin.
-
Reset Consumer Offset panelinde hedef konuyu ve sıfırlama yöntemini seçin ardından OK öğesini tıklayın.
UyarıStart Consumption from Latest Offset seçeneğini belirlerseniz belirtilen konudaki grup kimliği için biriken tüm mesajlar temizlenir. Bu işlemin etkili olması yaklaşık 2 ila 3 dakika sürer. İşlemi tekrarlamayın. Bu süre boyunca uygulamadaki tüm tüketiciler 2 ila 3 dakika boyunca tüketimi duraklatır. İşiniz gecikme süresine duyarlıysa dikkatli olun.
Start Consumption from Latest Offset : Bu seçeneği belirlerseniz gruptaki tüketiciler belirtilen konudaki tüm biriken mesajları atlar ve en son mesajdan itibaren tüketimi başlatır.
Start Consumption from Offset Corresponding to Specified Point in Time : Bu seçeneği belirlerseniz bir zaman seçimi kontrolü görüntülenir. Belirli bir zaman noktası belirtebilirsiniz. Tüketiciler mesajların daha önce tüketilip tüketilmediğine bakılmaksızın bu zamandan sonra gönderilen mesajları tüketmeye başlar.
Prompt iletişim kutusunda bilgileri onaylayın ve OK öğesini tıklayın.
SSS
Her iki yöntemi de kullanarak tüketici ofsetini sıfırlayamadıysam ne yapmalıyım?
Kümeleme (clustering) tüketimi kullandığınızı doğrulayın. Yayın (broadcasting) tüketim modu tüketici ofsetlerinin sıfırlanmasını desteklemez.
Tüketicinin çevrimiçi olduğunu doğrulayın. Tüketici ofsetlerini yalnızca tüketiciler çevrimiçi durumdayken sıfırlayabilirsiniz.
SDK sürümünü kontrol edin. SDK sürümü güncel değilse bu sorun oluşabilir. SDK'yı en son sürüme yükseltmenizi öneririz. Örneğin Java için TCP istemci SDK'sının sürümü 1.8.0.Final veya üzeri olmalıdır. Daha fazla bilgi için bkz. Sürüm Kılavuzu.
Biriken mesajları atlamak için tüketici ofsetini sıfırladıktan sonra neden bazı mesajlar sıfırlanmaz?
Tüketici ofseti sıfırlama özelliği yeniden deneme durumunda olan mesajlara uygulanmaz. Bu nedenle sıfırlama işleminden sonra yeniden deneme bekleyen az sayıda mesaj hala teslim edilebilir.
Tüketiciler tüketici ofsetini sıfırlayarak yeniden tüketebileceği en eski mesaj hangisidir?
Bir ofseti belirtilen bir zaman noktasına sıfırladığınızda seçebileceğiniz en erken zaman konudaki en eski mesajın depolandığı zamana karşılık gelir. ApsaraMQ for RocketMQ 4.x serisi örnekler mesajları en fazla 3 gün süreyle saklar. 3 günden eski mesajlar konudan silinir.
Bu nedenle tüketiciler tüketici ofsetini sıfırlayarak en fazla 3 günlük mesajları yeniden tüketebilir.
İlgili kaynaklar
Konsola ek olarak ApsaraMQ for RocketMQ API işlemlerini çağırarak tüketici ofsetlerini sıfırlamanıza olanak tanır.