apache-spark - 在 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/秒。
解决方案
推荐阅读
- unity3d - 我如何获取和渲染 sprite 表单 dataPath?
- java - 有没有办法将Extra放入对话框
- r - 在 R 中过滤日期
- java - 页面未调整大小/向其他用户显示不同的问题
- python - 导入 Sklearn 时出现错误
- r - 为什么在 mapply 的 MoreArgs 参数中进行变量赋值与在其“...”参数中进行变量赋值给出不同的结果?
- python - 用于监控 github repos 更改的 Python 看门狗
- ruby - 无法使用 Rails / Vue / Nginx / Puma 正确配置 WebSocket
- fonts - 热制作字体的粗体版本(.ttf / .otf 格式)
- amazon-web-services - 将 AWS ECS 与 EC2 实例结合使用时出现 CannotStartContainerError