Apache kafka 有没有办法确保卡夫卡主题中不插入重复记录?

Apache kafka 有没有办法确保卡夫卡主题中不插入重复记录?,apache-kafka,kafka-producer-api,Apache Kafka,Kafka Producer Api,我一直在尝试使用kafka实现一种排队机制,我希望确保不会将重复记录插入到创建的主题中 我发现在消费者中迭代是可能的。是否有任何方法可以在producer线程中也执行此操作?这称为一次处理 您可能会对本文的第一部分感兴趣,该部分介绍了一些避免数据生产(即生产商方面)重复的方法: 精确一次语义有两个部分:避免数据传输过程中的重复 生产和避免数据消耗期间的重复 有两种方法可以在数据传输过程中精确获取一次语义 制作: 在每个分区和每次获得网络时使用一个编写器 错误检查该分区中的最后一条消息,查看您的

我一直在尝试使用kafka实现一种排队机制,我希望确保不会将重复记录插入到创建的主题中


我发现在消费者中迭代是可能的。是否有任何方法可以在producer线程中也执行此操作?

这称为一次处理

您可能会对本文的第一部分感兴趣,该部分介绍了一些避免数据生产(即生产商方面)重复的方法:

精确一次语义有两个部分:避免数据传输过程中的重复 生产和避免数据消耗期间的重复

有两种方法可以在数据传输过程中精确获取一次语义 制作:

  • 在每个分区和每次获得网络时使用一个编写器 错误检查该分区中的最后一条消息,查看您的 写成功
  • 在中包含主键(UUID或其他内容) 在使用者上执行消息和重复数据消除
  • 如果您执行其中一项操作,卡夫卡主持的日志将被删除 免费复制。然而,没有副本的阅读取决于某些因素 消费者的合作也是如此。如果消费者定期 检查其位置,然后如果失败并重新启动,它将 从检查点位置重新启动。因此,如果数据输出和 检查点不是以原子方式写入的,因此可以获取 这里也有副本。此问题特定于您的存储 系统。例如,如果您使用的是数据库,则可以提交 在一笔交易中,这两个项目组合在一起。LinkedIn的HDFS加缪加载程序 Write对Hadoop加载执行类似的操作。另一种选择 不需要事务处理的是使用 使用主题/分区/偏移量加载数据并消除重复数据 组合

    我认为有两个改进可以让这变得更容易:

  • 生产者幂等可以自动完成,而且成本更低 通过在服务器上选择性地集成对此的支持
  • 现存的 高级消费者不会公开很多更细粒度的内容 偏移控制(例如,重置位置)。我们会工作的 很快

  • 我们可以在主题中添加记录时使用唯一键来保持唯一性吗?@ShubhangiGupta,这取决于情况。你认为两个消息有“代码>key=1,value=a < /代码>和<代码> key=2,value=a < /代码>是不同的还是重复的?我认为这是一个与HasMead类似的不同的值。既然你认为这些键值对是不同的,那么通过提供唯一的密钥,你将得到独特的记录。但是,如果您提供一个示例,它会更有用,因为我仍然不确定您想要实现什么。例如,我想在创建的主题中存储记录,如下所示:如果主题中已经存在一条key=1的记录,并且如果我想在此主题中再次插入另一条key=1的记录,然后不应插入该值,或者应在hashmap中更新旧值。