我正在考虑是否将MongoDB或Kafka用于时间序列数据集。
乍一看显然使用Kafka是有道理的,因为它就是它的基础。但是我也希望在查询等方面有一些灵活性。
这让我有疑问:“为什么不使用MongoDB存储带时间戳的数据并按时间戳索引它们?”
天真的想法,这感觉它具有Kafka的类似好处(因为它被时间偏移索引)但具有更大的灵活性。但话说回来,我确信人们使用Kafka而不是MongoDB来解决这类用例的原因很多。
有人可以解释一下为什么人们可能想要在这种情况下使用Kafka而不是MongoDB?
我会尝试将此问题视为您尝试随时间收集指标
是的,Kafka主题有可配置的时间保留,我怀疑你是在使用主题压缩,因为你的消息可能是(time, value)
的形式,所以时间无论如何都不能重复。
Kafka还提供流处理库,以便您可以在时间窗口中找到平均值,最小值/最大值,异常值和anamolies,顶部K值等。
但是,虽然处理所有数据非常有用,但您的消费者仍然会对此数据执行线性扫描,并且无法在任何给定时间范围内查询切片。而这就是时间索引(不仅仅是起始索引,而且是结束)的帮助。
因此,确保您可以使用Kafka创建积压的排队度量标准,并随着时间的推移处理/过滤它们,但我建议将这些数据用于正确的数据库,因为我假设您希望能够更轻松地查询它并可能创建对该数据的一些可视化。
使用该架构,您可以让您的高可用性Kafka群集在一段时间内保留数据,而您的下游系统不一定必须始终在线才能接收事件。但是一旦它们出现,它们就会消耗掉之前可用的偏移和拾取
与上面评论中的答案一样 - 由于@Alex Blex解释得很好,Kafka和MongoDB都不适合作为具有灵活查询功能的时间序列数据库。
根据处理速度与查询灵活性与数据大小的要求,我会做以下选择:
附:通过“处理”在这里我指的是摄入,分区和翻转所需的P.P.S.在我看来,我选择了目前使用最广泛的选项,但是有许多其他选项和组合以及更多选择标准可供使用 - 有兴趣了解其他工程师的经验!