我在世界各地有许多将数据发送到服务器的应用程序。 所有数据都是使用Kafka流作为avro生成的,具有40个分区的Kafka主题 我想防止重复数据。 就我而言,这些应用程序可以多次发送同一条消息(即使几分钟后),我想知道Kafka是否可以帮助我阻止该消息。 是否可以“散列”消息并阻止两次向Kafka发送消息?
我只读过一次,等等。似乎它支持生产者未能生产的情况。
我希望Kafka可以在限定的时间内(例如10分钟)阻止重复的消息
答案 0 :(得分:0)
如果数据的生产者是Streams应用程序,则可以考虑使用Suppress运算符来缓冲和抑制重复项。
请参阅: https://kafka.apache.org/documentation/streams/developer-guide/dsl-api.html#controlling-emit-rate
这假定重复项来自KTable更新。
如果您想提供这些上游应用程序之一的示例,我可以举一个更具体的示例,但是它基本上看起来像:
myKTable
.suppress(untilTimeLimit(
ofMinutes(10),
maxBytes(1_000_000).emitEarlyWhenFull()
))
.to(...the output topic...)
如果要防止重复,则必须在生产者端执行类似的操作。另一方面,如果您只想保存重复存储的 ,则可以对相关主题配置日志压缩。
我希望这会有所帮助!
-约翰