我正在考虑是否将MongoDB或Kafka用于时间序列数据集。
乍看之下,显然,使用Kafka是有道理的,因为这是它的基础。但我也希望在查询等方面具有一定的灵活性。
哪个使我发问:“为什么不只使用MongoDB存储带有时间戳的数据并按时间戳对其进行索引?”
天真地思考,这感觉就像具有Kafka的优点(因为它通过时间偏移量进行索引),但是具有更大的灵活性。但话又说回来,我敢肯定人们有很多原因为什么人们会在这种用例中使用Kafka而不是MongoDB。
有人可以解释这种情况下为什么要使用Kafka而不是MongoDB的一些原因吗?
答案 0 :(得分:2)
由于您要逐步收集指标,因此我会尝试回答这个问题
是的,Kafka主题具有可配置的时间保留,我怀疑您正在使用主题压缩,因为您的消息很可能采用(time, value)
的形式,因此无论如何都无法重复该时间。
Kafka还提供了流处理库,以便您可以找到一段时间内的平均值,最小值/最大值,离群值和纳摩尔值,最高K等值。
但是,尽管处理所有这些数据都是非常有用的,但您的消费者将无法对这些数据进行线性扫描,从而很难在任何给定的时间范围内查询其切片。这就是时间索引(不仅是起始索引,而且还有结束索引)会有所帮助的地方。
因此,请确保您可以使用Kafka创建待处理指标的积压并随时间推移对其进行处理/过滤,但是我建议您将该数据存储到适当的数据库中,因为我认为您将能够更轻松地查询它并可能在这些数据上创建一些可视化效果。
使用该架构,您可以使高可用性的Kafka集群在一段时间内保留数据,而下游系统不必始终保持在线状态才能接收事件。但是一旦到达,它们就会从上一次可用的偏移量和拾取位置消耗
答案 1 :(得分:1)
就像上面评论中的答案一样,Kafka和MongoDB都不适合用作具有灵活查询功能的时间序列数据库,原因是@Alex Blex解释得很好。
根据对处理速度,查询灵活性和数据大小的要求,我会做出以下选择:
P.S。这里的“处理”是指在需要时同时进行摄取,分区和汇总 P.P.S.我认为,我选择了目前使用最广泛的选项,但还有许多其他选项和组合,还有更多选择标准要使用-希望了解其他工程师的经验!