[英]Spring Cloud Stream: @StreamListener processing messages twice
[英]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.