首页 > 解决方案 > 德鲁伊如何在 Kafka 索引服务中删除重复项

问题描述

我将 DRUID 与 Kafka 索引服务一起使用。我试图了解它如何处理重复消息。

例子

考虑我在 Kafka 主题[仅 1 个分区] 中有以下消息

[偏移量=100]

{
  "ID":4,
  "POINTS":1005,
  "CREATED_AT":1616258354000000,
  "UPDATED_AT":1616304119000000
}

现在考虑 24 小时后,以某种方式再次将相同的消息推送到主题。

[偏移量=101]

{
  "ID":4,
  "POINTS":1005,
  "CREATED_AT":1616258354000000,
  "UPDATED_AT":1616304119000000
}

注意:有效载荷没有改变。

实际:现在,在 DRUID 中,我再次看到相同的消息。

预期:我期望的是,由于有效负载没有更改,因此应该忽略消息。

我的时间戳列是CREATED_AT

标签: druid

解决方案


你能确定永远不会有两个具有相同时间戳的唯一事件而不是重复事件吗?如果是这样,您可以尝试使用汇总来消除重复项。

您可以在粒度规范中设置它,并且 queryGranularity 基本上会根据该粒度截断所有时间戳,如果所有维度都相同,则使用您在规范中设置的聚合函数将它们组合起来。

对于聚合函数,您需要使用 MAX 或 MIN 之类的函数,因为 SUM 会将它们相加。

如果您有多个 kafka 分区,这将失败,但可以通过重新索引来修复。


推荐阅读