繁体   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