有没有办法确保Kafka主题中不插入重复的记录?

kgsdhlau  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(307)

我一直在尝试使用kafka实现一种排队机制,我希望确保重复记录不会插入到创建的主题中。
我发现在消费者中迭代是可能的。有什么方法可以让我们在producer线程中也这样做吗?

hec6srdp

hec6srdp1#

这就是所谓的一次处理。
您可能会对kafka faq的第一部分感兴趣,该部分描述了如何避免数据生产(即生产商方面)上的重复的一些方法:
精确一次语义有两个部分:在数据生产过程中避免重复和在数据消耗过程中避免重复。
在数据生成过程中,有两种方法可以精确获取一次语义:
每个分区使用一个writer,每次出现网络错误时,检查该分区中的最后一条消息,看看最后一次写入是否成功
在消息中包含一个主键(uuid或其他东西),并在使用者上进行重复数据消除。
如果你做这些事情之一,Kafka主机的日志将复制免费。然而,没有副本的阅读也依赖于消费者的合作。如果使用者定期检查其位置,则如果失败并重新启动,它将从检查点位置重新启动。因此,如果数据输出和检查点不是以原子方式写入的,那么这里也有可能获得重复的数据。此问题是存储系统特有的。例如,如果您使用的是数据库,则可以在事务中同时提交这些数据库。linkedin编写的hdfs加载程序camu为hadoop加载做了类似的事情。另一种不需要事务的方法是存储加载数据的偏移量,并使用主题/分区/偏移量组合进行重复数据消除。
我认为有两个改进可以使这更容易:
生产者幂等可以通过在服务器上选择性地集成对这一点的支持来自动完成,而且成本更低。
现有的高级使用者不会公开很多更细粒度的偏移控制(例如,重置位置)。我们很快就会解决的

相关问题