有什么方法可以确保在kafka主题中没有插入重复的记录?

时间:2018-09-10 08:52:28

标签: apache-kafka kafka-producer-api

我一直在尝试使用kafka实现排队机制,我想确保在创建的主题中不插入重复的记录。

我发现在消费者中可以进行迭代。还有什么方法可以在生产者线程中做到这一点?

1 个答案:

答案 0 :(得分:1)

这称为精确一次处理。

您可能会对Kafka FAQ的第一部分感兴趣,该部分描述了一些有关如何避免在数据生产(即生产方)上重复的方法:

  

语义一度只有两个部分:避免在数据期间重复   生产,并避免在数据消耗期间重复。

     

有两种方法可以在数据期间精确获取一次语义   生产:

     
      
  1. 每个分区以及每次访问网络时都使用一个写入器   错误检查该分区中的最后一条消息,以查看您的最后一条消息   写成功
  2.   
  3. 在主目录中包含主键(UUID或其他内容)   消息并在消费者上进行重复数据删除。
  4.   
     

如果您执行以下任一操作,则Kafka托管的日志将为   无重复。但是,没有重复的阅读取决于   也来自消费者的合作。如果消费者定期   检查它的位置,然后如果它失败并重新启动它将   从检查点位置重新启动。因此,如果数据输出和   检查点不是原子写的,将有可能得到   在这里也重复。此问题特定于您的存储   系统。例如,如果您使用的是数据库,则可以提交   这些一起进行交易。 HDFS加载程序Camus LinkedIn   对于Hadoop负载,Write做了类似的事情。另一种选择   不需要交易的是将偏移量与   使用主题/分区/偏移量加载和删除重复数据   组合。

     

我认为有两项改进可以使这变得容易得多:

     
      
  1. 生产商幂等可以自动完成,而且成本更低   通过有选择地在服务器上集成对此的支持。
  2.   
  3. 现有   高水平的消费者不会暴露很多更细粒度的   控制偏移量(例如重置您的位置)。我们将努力   不久之后
  4.