防止记录重复

时间:2019-06-19 13:10:20

标签: apache-kafka apache-kafka-streams

我在世界各地有许多将数据发送到服务器的应用程序。 所有数据都是使用Kafka流作为avro生成的,具有40个分区的Kafka主题 我想防止重复数据。 就我而言,这些应用程序可以多次发送同一条消息(即使几分钟后),我想知道Kafka是否可以帮助我阻止该消息。 是否可以“散列”消息并阻止两次向Kafka发送消息?

我只读过一次,等等。似乎它支持生产者未能生产的情况。

我希望Kafka可以在限定的时间内(例如10分钟)阻止重复的消息

1 个答案:

答案 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...)

如果要防止重复,则必须在生产者端执行类似的操作。另一方面,如果您只想保存重复存储的 ,则可以对相关主题配置日志压缩。

我希望这会有所帮助!

-约翰