【问题标题】:Kafka having duplicate messages卡夫卡有重复的消息
【发布时间】:2016-03-06 06:55:45
【问题描述】:

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

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

任何帮助将不胜感激

【问题讨论】:

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


    【解决方案1】:

    阅读有关 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. 在 消费者的消息和重复数据删除。

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

    【讨论】:

    • 感谢阿纳托利的回答。您选择了第二种解决方案,但您不会期望在使用数据时会产生重复数据删除的开销。我们将拥有更大的数据集,例如每秒 50k 条消息,如果我们在消费者中使用 dedup,那么我将不得不为每个唯一 uuid 维护一个哈希,我预计这会对处理产生很大影响。
    • 每秒 50k 对消费者来说是严重的负载。您可以为您的用例测试第一个和第二个解决方案或等待未来的版本。 “Apache Kafka 社区计划专注于操作简单性和更强大的交付保证。这项工作包括自动数据平衡、更多安全性增强以及对 Kafka 中的一次性交付的支持”
    • @AnatolyDeyneka :你有什么想法,如何实现每个分区的单个写入器?
    • @AnatolyDeyneka - 你完全应该写一篇关于这个的博客。我的意思是解释它在理论上是如何工作的,然后是一些代码示例供其他人尝试作为参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 2016-11-03
    • 2021-01-26
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多