我正在处理疯狂的时间序列数据。所以,我有两个Kafka主题- 1)每5秒钟移动车辆的实时时间序列数据。 2)历史时间序列数据,以防车辆在偏远地区行驶时10%的车辆,因此,数据一旦进入网络即会发送,可能是几小时,几天或一周之后。
所以,我的cassandra表有点像这样
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的体系结构,因此表中会发生很多混乱。数据只不过是按顺序存储在已定义的分区上,对于历史条目,记录来自行之间。因此,发生的事情是在一段时间后,Spark Streaming应用程序挂起。经过大量搜索,我发现我的表策略可能存在问题,因此,如果我创建这样的表模式-
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 / sec。