【发布时间】:2016-03-06 06:55:45
【问题描述】:
我在生成或使用数据时没有看到任何故障,但是在生产中存在大量重复消息。对于一个收到大约 100k 消息的小主题,有大约 4k 重复,尽管就像我说的没有失败,最重要的是没有实现重试逻辑或设置配置值。
我还检查了这些重复消息的偏移值,每个消息都有不同的值,这告诉我问题出在生产者中。
任何帮助将不胜感激
【问题讨论】:
标签: apache-kafka kafka-consumer-api kafka-producer-api
我在生成或使用数据时没有看到任何故障,但是在生产中存在大量重复消息。对于一个收到大约 100k 消息的小主题,有大约 4k 重复,尽管就像我说的没有失败,最重要的是没有实现重试逻辑或设置配置值。
我还检查了这些重复消息的偏移值,每个消息都有不同的值,这告诉我问题出在生产者中。
任何帮助将不胜感激
【问题讨论】:
标签: apache-kafka kafka-consumer-api kafka-producer-api
阅读有关 kafka 中消息传递的更多信息:
https://kafka.apache.org/08/design.html#semantics
Kafka 在默认情况下有效地保证了至少一次交付,并且 允许用户通过禁用最多执行一次交付 重试生产者并在处理之前提交其偏移量 一批消息。一次性交付需要与 目标存储系统,但 Kafka 提供了偏移量 使实现这一点变得简单。
您可能正在寻找类似 jms 中的“恰好一次交付”
https://cwiki.apache.org/confluence/display/KAFKA/FAQ#FAQ-HowdoIgetexactly-oncemessagingfromKafka?
有两种方法可以在数据期间获得恰好一次的语义 生产: 1. 每个分区使用一个写入器,每次你得到一个 网络错误检查该分区中的最后一条消息以查看您的 上次写入成功 2. 在 消费者的消息和重复数据删除。
我们在系统中实施了第二点。
【讨论】: