簡體   English   中英

Spring Cloud Stream:需要很長時間來處理消息時,對StreamListener的正確處理

[英]Spring Cloud Stream: Proper handling for StreamListener when it takes a long time to process the message

當StreamListener花費很長時間(比max.poll.interval.ms更長)來處理一條消息時,該特定使用者將被占用,並且其他新消息將分配給其他分區。 時間大於max.poll.interval.ms ,發生了重新平衡,另一個用戶也會遇到相同的情況。 因此,該消息將在所有分區中傳播,並繼續占用資源。

但是,這種情況並不經常發生,只有幾條消息以某種方式花費了很長時間才能處理,並且這是無法控制的。

經過幾次重新平衡后,我們可以提交偏移量並將其扔給DLQ嗎? 如果是,我們該怎么做? 如果沒有,那么這種情況的正確處理方法是什么?

增加max.poll.interval.ms不會對性能產生任何影響(除非檢測到真正死亡的使用者需要更長的時間)。

每次處理此“不良”記錄時都要進行重新平衡,這會對性能造成更大的損害。

但是,您可以使用自定義SeekToCurrentErrorHandler以及諸如DeadLetterPublishingRecoverer類的恢復器來完成所需的操作 您還需要一個重新平衡偵聽器來計算重新平衡,並需要一些機制來在實例之間共享來自錯誤處理程序的狀態(標准的僅將狀態保存在內存中)。

我認為這很復雜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM