我正在考虑实施 Lambda 架构以处理由多个设备传输的事件。在大多数情况下(平均值等),它似乎符合我的要求。但是,我一直在尝试为特定用例建模。简而言之...
每个设备都有一个device_id。每个设备每秒发出 1 个事件。每个事件的event_id范围为 {0-->10}。
event_id 为 0 表示开始,event_id 为 10 表示结束
START 和 END 之间的所有事件都应归为一个组 (event_group)。这将产生 event_groups 的元组,即{0,2,2,2,5,10} , (0,4,2,7,...5,10), (0,10) 这 (event_group) 可能很小即10分钟或非常大的说3小时。
根据 Lambda 架构,每台设备传输的这些事件都是我的“主数据集”。目前,事件使用 Kafka(Camus,Kafka Spout)发送到 HDFS 和 Storm。
在 Streaming 过程中,我按 device_id 分组,并使用 Redis 在内存中维护一组传入事件,基于每次 event_id=0 到达时生成的键。 问题在于HDFS。假设我每小时保存一个包含所有传入事件的文件。有没有办法区分这些(group_events)?
使用 Hive,我可以以相同的方式对元组进行分组。但是,每个文件也将包含“破碎”的 event_groups
- (0,2,2,3) 先前的计算(文件)
- (4,3,) 先前的计算(文件)
- (5,6,7,8,10) 电流计算(文件)
所以我需要根据device_id将它们合并到(0,2,2,3,4,3,5,6,7,8,10)(多个文件)
Lambda 架构是否适合这种情况?还是流式处理应该是唯一的事实来源?即写入 hbase,hdfs 本身不会影响整体延迟。