在生成或使用数据时我没有看到任何失败,但是生产中有大量重复的消息。对于一个获得大约100k消息的小主题,有大约4k重复,虽然我说没有失败,最重要的是没有实现重试逻辑或设置配置值。
我还检查这些重复消息的偏移值,每个消息都有不同的值,告诉我问题出在生产者身上。
任何帮助都将受到高度赞赏
答案 0 :(得分:6)
阅读有关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.包括主键(UUID或其他) 对消费者的消息和重复数据删除。
我们在系统中实施了第二点。