Kafka中nack()后的消息:会被其他消费者获取还是仅重投给原消费者?
Kafka Nack消息的投递逻辑(多Consumer场景)
- 核心取决于消费者组和分区分配的规则:
- 若其他Consumer和你的Consumer属于同一个消费者组:
- 当你调用
acknowledge.nack(6000L)时,消息会被标记为未处理,6秒后重新回到对应分区的待消费队列。 - 如果在这6秒内,消费者组触发了重平衡(比如新Consumer加入、现有Consumer下线),该分区被分配给组内其他Consumer,那么延迟到期后,这条消息就会被新的Consumer获取。
- 如果没有发生重平衡,分区始终由原Consumer持有,消息会重新投递给这个特定的Consumer。
- 当你调用
- 若其他Consumer和你的Consumer属于不同消费者组:
- 不同组的消费是完全独立的,各自维护自己的消费偏移量。不管你这边有没有Nack消息,其他组的Consumer都会正常拉取分区内的消息,不受影响。
- 若其他Consumer和你的Consumer属于同一个消费者组:
简单总结:Nack不会把消息“绑定”给原Consumer,最终谁能拿到,看对应分区当前被哪个同组Consumer持有。
内容的提问来源于stack exchange,提问作者ojblass
相关产品推荐
相关产品推荐

