>我在世界各地有许多应用程序将数据发送到我的服务器。所有数据均使用 Kafka 流作为 avro 生成到 Kafka 主题中,具有 40 个分区我想防止重复数据。就我而言,应用程序可以多次发送相同的消息(即使在几分钟后(,我想知道 Kafka 是否可以帮助我防止它。是否有任何选项可以"散列"消息并防止向 Kafka 生成两次?
我读过一次等等,似乎它支持制片人未能制作的情况。
我希望 Kafka 能够在有限的时间内(假设 10 分钟(防止重复的消息
如果数据的生成者是 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...)
如果你想防止重复,你必须在生产者方面做这样的事情。另一方面,如果您只想节省存储重复项的费用,则可以在相关主题上配置日志压缩。
我希望这有帮助!
-John