Spring Kafka 2.8.8:多消费者非阻塞重试出现消息串流,是配置错误吗?
问题:Spring Kafka 2.8.8 多消费者独立重试主题消息串流问题
场景说明
- 基于Spring Kafka 2.8.8开发
- 两个消费者监听同一主主题,各自配置独立消费组,通过
@RetryableTopic注解实现非阻塞重试机制 - 每个消费者对应生成3个重试主题,所有重试主题均配置独立消费组
消费者代码实现
第一个消费者
@KafkaListener( topics = "topic", containerFactory = "containerFactory-one", groupId = "group-one" ) @RetryableTopic( attempts = "3", backoff = @Backoff(delay = 30000, multiplierExpression = 2.0 , maxDelay = 600000), listenerContainerFactory = "containerFactory-one", kafkaTemplate = "template-one", retryTopicSuffix = "-one-retry", dltTopicSuffix = "-one-dlt", topicSuffixingStrategy = TopicSuffixingStrategy.SUFFIX_WITH_INDEX_VALUE )
第二个消费者
@KafkaListener( topics = "topic", containerFactory = "containerFactory-two", groupId = "group-two" ) @RetryableTopic( attempts = "3", backoff = @Backoff(delay = 30000, multiplierExpression = 2.0 , maxDelay = 600000), listenerContainerFactory = "containerFactory-two", kafkaTemplate = "template-two", retryTopicSuffix = "-two-retry", dltTopicSuffix = "-two-dlt", topicSuffixingStrategy = TopicSuffixingStrategy.SUFFIX_WITH_INDEX_VALUE )
问题现象
第一个消费者处理消息失败后,重试消息被正常发送,但实际被第二个消费者对应的retry-0主题读取消费,出现了重试消息跨消费者串流的异常情况。
原因及解决方案
这是Spring Kafka 2.8.8版本的已知Bug,并非代码或配置错误。该问题已在Spring Kafka项目内部issue中被记录,并在3.0.0版本中完成修复。
内容的提问来源于stack exchange,提问作者cloud_7
相关产品推荐
相关产品推荐

