首页 > 解决方案 > 在 Cassandra 中处理历史时间序列数据的策略

问题描述

我正在处理疯狂的时间序列数据。所以,我有两个 Kafka 主题 - 1)每 5 秒移动车辆的实时时间序列数据。2) 10% 车辆的历史时间序列数据,如果车辆在偏远地区行驶,数据一旦进入网络就会发送,可能是几个小时、几天或一周后。

所以,我的 cassandra Table 有点像这样

CREATE TABLE locationinfo (
imei text,
date text,
entrydt timestamp,
gpsdt timestamp,
lastgpsdt timestamp,
latitude text,
longitude text,
odo int,
speed int,
PRIMARY KEY ((imei, date), gpsdt) 
) WITH CLUSTERING ORDER BY (gpsdt ASC)

& 我正在使用 Spark Streaming 从 Kafka 获取数据并插入 Cassandra,这里的集群键是 gpsdt。每当历史数据来自 Kafka 时,由于我们知道 Cassandra 的架构,因此会在表中发生大量 shuffle。数据只不过是按顺序存储在定义的分区上,历史条目记录来自行间。所以,经过一段时间后,火花流应用程序会挂起。经过大量搜索后,我发现我的表策略可能存在问题,所以如果我创建这样的表模式 -

CREATE TABLE locationinfo (
imei text,
date text,
entrydt timestamp,
gpsdt timestamp,
lastgpsdt timestamp,
latitude text,
longitude text,
odo int,
speed int,
PRIMARY KEY ((imei, date), entrydt)
) WITH CLUSTERING ORDER BY (entrydt ASC)

这里的顺序是根据插入时间定义的,所以每当历史数据到来时,它总是会附加在最后,并且不会有洗牌的开销。但是,在这种情况下,我将无法在 gpsdt 上进行范围查询。所以,我想知道处理这种情况的最佳策略应该是什么。我来自 kafka 的负载超过 2k/秒。

标签: apache-sparkcassandraapache-kafkadatastax-enterprisecassandra-3.0

解决方案


推荐阅读