我正在尝试设计流媒体应用程序的架构,并为工作选择合适的工具。
目前的工作方式如下:
来自“application-producer”部分的消息具有(address_of_sensor, timestamp, content)
元组的形式。
我已经在Kafka之前实现了所有功能,现在我遇到了设计中的重大缺陷。在“Spark Streaming”部分中,合并的消息流被转换为事件流。问题在于,大多数事件都是复合事件 - 由多个消息组成,这些消息在不同的传感器上同时发生。
我不能依靠“到达卡夫卡的时间”作为检测“同时性”的手段。所以我必须以某种方式在Kafka中对消息进行排序,然后再使用Spark解压缩它们。或者,更确切地说,对Kafka消息进行查询。
也许Cassandra在这里是Kafka的正确替代品?我有非常简单的数据模型,只有两种可能的查询类型:按地址查询,按时间戳查询范围。也许这是正确的选择?
有人拥有任何数量的Cassandra吞吐量吗?
答案 0 :(得分:0)
如果你想对你的时间序列运行查询,Cassandra可能是最合适的 - 它是非常优化的,你可以为你的系列构建'宽'行。可以在宽行上创建切片,因此只需一个查询就可以选择一些时间范围。
另一方面,kafka可以被视为原始数据流 - 您没有查询,只有最近生成的数据。为了根据同一分区中的某些密钥收集数据,您必须仔细选择此密钥。同一分区中的所有数据都按时间排序。
答案 1 :(得分:0)
Timestamp上的范围查询是cassandra的经典用例,如果您需要基于地址的查询,如果使用cassandra,则必须将它们作为聚类列。就cassandra througput而言,如果您可以在cassandra集群上进行适当的性能分析,那么您可以实现非常高的写入吞吐量。但是我使用了SparkQL,Cassandra驱动程序和spark Cassandra连接器,它们并没有真正提供高查询吞吐量的速度,除非你有一个高CPU配置的大型集群,它对小数据集不起作用。
Kafka不应该用作查询的数据源,更多的是提交日志