有没有遇到 Druid 在 GroupBy 查询的时候数据延迟

公司尝试使用 Druid 作为时序分析数据库。

我们设计是数据从 Kafka 中获取,然后进入 Druid 中。

在我们发送消息到 Druid 后,使用 Select *, 我们能看到导入的数据。

上面已经能够查询到摄入的数据了。

但是使用 GroupBy 的时候,这条数据没有显示,通常需要等 10 到 20 分钟不等。

GroupBy 的查询却查询不到。

问题

不知道 Druid 是否有一个索引和缓存机制?

如果有这样的话欢迎大家参与讨论下,解决我们的困惑。

针对这个问题,我们也向官方询问了,不幸的是得到的社区反应非常慢而且杂音也非常多。

经过一段时间的搜索和官方文档的检查,发现问题出在一个过滤器上面:

"fields": [
            {
                "type": "bound",
                "dimension": "Error",
                "lower": null,
                "upper": "0",
                "lowerStrict": false,
                "upperStrict": false,
                "extractionFn": null,
                "ordering": {
                    "type": "numeric"
                }
            },

数据流程为,我们先发送数据到 Kafka,然后 Druid 从 Kafka 获得数据后在插入到 Druid 中。

在 Kafka 的消息中我们没有为字段 “Error” 设置值。

同时在 Druid 的设置中,我们也没有为字段 “Error” 设置默认值。

在从 Kafka 中获得数据后,Druid 将会为字段 “Error” 设置默认值为 0,但是这个设置的默认值 0 是不能被查询的,需要等候一些时间才能够被查询。

至于为什么不能够被查询,我们现在还不太清楚,但是解决办法如下:

  1. 在 Kafka 的消息中为字段 “Error” 设置值。
  2. 在 “Error” 定义的时候,为 “Error” 设置默认值,如果 Kafka 的消息中没有这个字段的话,需要 Druid 自动赋值。

至于方案 2 的解决,现在还不太清楚是如何设,但是上面 2 个方案至少可以提供思路。