避免在Apache Kafka Consumer中重复消息的有效策略

避免在Apache Kafka Consumer中重复消息的有效策略,第1张

避免在Apache Kafka Consumer中重复消息的有效策略

最简洁的答案是不。

您要查找的是一次精确的处理。尽管它似乎经常可行,但永远不要依赖它,因为总会有一些警告。

即使为了防止重复,您也需要使用简单的使用者。对于每个使用者,此方法的工作方式是:从某个分区使用一条消息时,将使用的消息的分区和偏移量写入磁盘。当使用者在故障后重新启动时,请从磁盘读取每个分区的上一个消耗的偏移量。

但是,即使采用这种模式,使用者也无法保证在失败后不会重新处理消息。如果使用者使用一条消息然后在将偏移量刷新到磁盘之前失败,该怎么办?如果在处理消息之前先写磁盘,如果在实际处理消息之前先写偏移量然后失败,该怎么办?即使您在每条消息之后将偏移量提交给ZooKeeper,也将存在相同的问题。

但是,在某些情况下,更精确的一次处理是可以实现的,但仅适用于某些用例。这仅要求将偏移量存储在与单元应用程序输出相同的位置。例如,如果编写一个对消息进行计数的使用者,则通过将最后计数的偏移量与每个计数一起存储,可以保证该偏移量与使用者的状态同时存储。当然,为了保证处理一次,这将要求您只消耗一条消息并为每条消息更新一次状态,这对于大多数Kafka消费者应用程序来说是完全不切实际的。从本质上来说,Kafka出于性能原因而批量使用消息。

通常,如果仅将其设计为幂等的,则您的时间将花费更多,并且应用程序将更加可靠。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5500600.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存