Spring Kafka 和自动确认超时

ale*_*oid 3 apache-kafka spring-kafka

我使用 Kafka 消息代理和 Spring Kafka。

我使用默认的自动确认模型。有时我@KafkaListener需要大约 5 分钟才能完成工作。

我注意到,当这种情况发生时,卡夫卡会产生重复的消息。是否可以配置任何超时属性,以防止 Kafka 重复相同的消息并让 Producer 等待(至少例如 10 分钟),而 Consumer 将完成工作?

Gar*_*ell 5

生产者和消费者是解耦的——没有办法阻止生产者发送更多消息,因为消费者速度很慢。

我没有明确使用 auto.commit 。我使用默认的 Spring 配置

auto.commit默认情况true下(在 Kafka 客户端中),因此 spring 下的默认行为是客户端自己进行提交,而不是容器。将其设置为false并将容器属性设置AckModeRECORD,以便在侦听器退出后执行提交。

有一个kafka消费者属性 max.poll.interval.ms,默认为5分钟(300000)。

使用消费者组管理时,调用 poll() 之间的最大延迟。这对消费者在获取更多记录之前可以空闲的时间设置了上限。如果在此超时到期之前未调用 poll(),则消费者将被视为失败,并且组将重新平衡,以便将分区重新分配给另一个成员。

重新平衡将导致重新交付。您可以增加该属性以避免重新平衡。

正如我所说,日志通常会有所帮助;您应该在日志中看到重新平衡发生。