在kafka消费者中获取重复项

Getting duplicates in kafka consumer

我正在为 Kafka 写一个 Java 客户端 consumer.I 在处理之前异步提交每条消息 it.Still 我在重新平衡期间收到很多重复的消息。

任何人都可以解释原因以及如何避免这种情况吗?

Kafka Consumer 不提供恰好一次处理保证,即使您同步.

提交所有消息也是如此

问题是,当您成功处理完一条消息并想要提交它时,重新平衡可能会在提交之前发生。因此,您的提交未完成,将重新处理已处理的消息。

因为您使用异步 提交,所以重复的数量会增加,因为不会立即对每条消息进行提交。因此,您可以有许多消息 "in-flight" 已完成处理但尚未提交。在重新平衡时,将重新处理所有 "in-flight" 条消息。

因此同步提交将减少重复的数量。但是,重复是无法完全避免的,因为Kafka中没有exactly-once的投递保证。

虽然 Kafka 的未来版本路线图上有精确一次交付:https://cwiki.apache.org/confluence/display/KAFKA/KIP-98+-+Exactly+Once+Delivery+and+Transactional+Messaging