mongodb - 用于时间序列数据的 Kafka 与 MongoDB

标签 mongodb logging apache-kafka time-series

我正在考虑是将 MongoDB 还是 Kafka 用于时间序列数据集。

乍一看,使用 Kafka 显然很有意义,因为它就是为此而构建的。但我也希望在查询等方面有一些灵 active 。

这让我产生疑问:“为什么不直接使用 MongoDB 来存储带时间戳的数据并按时间戳对它们进行索引?”

天真地想,这感觉就像它具有与 Kafka 类似的好处(因为它是按时间偏移索引)但具有更大的灵 active 。但话又说回来,我确信人们有很多理由在这种类型的用例中使用 Kafka 而不是 MongoDB。

有人可以解释一下为什么在这种情况下可能想要使用 Kafka 而不是 MongoDB 的一些原因吗?

最佳答案

我将尝试回答这个问题,因为您正在尝试随时间收集指标

是的,Kafka 主题具有可配置的时间保留,我怀疑您正在使用主题压缩,因为您的消息可能采用 (time, value) 的形式,因此时间不能无论如何重复。

Kafka 还提供流处理库,以便您可以找出时间窗口内的平均值、最小值/最大值、离群值和异常值、前 K 值等。

然而,尽管处理所有这些数据非常有用,但您的消费者将无法对这些数据进行线性扫描,无法轻松查询任何给定时间范围内的数据切片。这就是时间索引(不仅是开始索引,还有结束索引)会有所帮助的地方。

因此,确保您可以使用 Kafka 创建排队指标的积压并随着时间的推移处理/过滤它们,但我建议将这些数据消耗到适当的数据库中,因为我假设您希望能够更轻松地查询它并有可能对这些数据创建一些可视化效果。

使用该架构,您可以让高度可用的 Kafka 集群在一段时间内保留数据,而您的下游系统不必一直在线即可接收事件。但是一旦它们完成了,它们就会从之前的最后可用偏移量和拾取器中消耗

关于mongodb - 用于时间序列数据的 Kafka 与 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52170115/

相关文章:

python - Python 中的线程安全警告

c# - 无法让 log4net 使用 .net Windows 服务

Grails:用 logback 替换 log4j

java - 如何从java应用程序订阅apache kafka中的主题?

javascript - 如何使用 ejs post 表单更新 node.js 和 MongoDB 应用程序中的现有用户数据?

javascript - MongoDB计算不同的值(value)?

java - 如何让KafkaProducer使用模拟的模式注册表进行测试?

apache-spark - Spark无法下载kafka库

javascript - mongodb:匹配数组中的元素并更新

c# - MongoDb C# 驱动程序 - 基于 "candidate"键更新插入许多内容