在kafka消费者中获得重复

时间:2016-11-14 11:16:58

标签: java apache-kafka kafka-consumer-api

我正在为Kafka使用者编写一个Java客户端。我在处理之前异步提交每条消息。在重新平衡期间,我收到了很多重复的消息。

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

1 个答案:

答案 0 :(得分:1)

即使您同时提交同步所有消息,Kafka Consumer也不会提供一次性处理保证。

问题是,当您成功完成消息处理并希望提交消息时,重新平衡可以在提交之前发生。因此,您的提交未完成,已处理的消息将被重新处理。

因为您使用异步提交,所以重复次数会增加,因为每个邮件都不会立即提交。因此,您可以在飞行中发送许多消息"已完成处理但尚未提交。在重新平衡,所有"飞行中"消息将被重新处理。

因此,提交同步将减少重复次数。但是,无法完全避免重复,因为Kafka没有确切的一次交付保证。

在Kafka的未来发布路线图中,确切地说一次交付:https://cwiki.apache.org/confluence/display/KAFKA/KIP-98+-+Exactly+Once+Delivery+and+Transactional+Messaging