5

我在生产或使用数据时没有看到任何失败,但是生产中有一堆重复的消息。对于一个收到大约 100k 消息的小主题,有大约 4k 重复,尽管就像我说的没有失败,最重要的是没有实现重试逻辑或设置配置值。

我还检查了这些重复消息的偏移值,每个消息都有不同的值,这告诉我问题出在生产者身上。

任何帮助将不胜感激

4

1 回答 1

6

阅读更多关于 kafka 消息传递的信息:

https://kafka.apache.org/08/design.html#semantics

因此,Kafka 在默认情况下有效地保证了至少一次交付,并允许用户通过禁用对生产者的重试并在处理一批消息之前提交其偏移量来实现最多一次交付。Exactly-once 交付需要与目标存储系统合作,但 Kafka 提供了偏移量,这使得实现这一点变得简单。

可能您正在寻找 jms 中的“恰好一次交付”

https://cwiki.apache.org/confluence/display/KAFKA/FAQ#FAQ-HowdoIgetexactly-oncemessagingfromKafka

有两种方法可以在数据生产过程中获得恰好一次的语义: 1. 每个分区使用单个写入器,每次收到网络错误时检查该分区中的最后一条消息,以查看最后一次写入是否成功 2. 包含主键(UUID 或其他东西)在消息中并对消费者进行重复数据删除。

我们在系统中实施了第二点。

于 2015-12-02T07:56:04.407 回答