第3章 Trident和传感器数据
在本章中,我们将介绍Trident topology。Trident在Storm上提供了高层抽象。Trident抽象掉了事务处理和状态管理的细节。特别是,它可以让一批tuple进行离散的事务处理。此外,Trident还提供了抽象操作,允许topology在数据上执行函数功能、过滤和聚合操作。
我们将使用传感器数据作为例子来更好地理解Trident。通常情况下,传感器数据流会来自不同的位置。一些传统的例子包括天气和交通状况,这种模式扩展到了更大的数据源。比如,手机应用产生的众多事件信息。处理手机生成的事件流就是另一个传感器数据处理的实例。
传感器数据包括不同设备发射的事件,往往是无穷尽的数据流。这正是Storm最合适的一种应用场景。
本章包括以下主题:
- Trident topology
- Trident spout
- Trident操作——filter和function
- Trident聚合——Combiner和Reducer
- Trident状态(state)
3.1 使用场景
在用Storm处理传感器数据时,为了更好地理解Trident topology,我们实现了一个Trident topolygy收集医学诊断报告来判断是否有疾病暴发的实例。
这个topology会处理的医学诊断事件包括以下的信息:
https://yqfile.alicdn.com/89aeb985f819351b49755263f1c7d879f9e07f7e.png" >
每个事件包括事件发生时的全球定位系统(GPS)的位置坐标,经度和纬度使用十进制小数表示。事件还包括ICD9-CM编码,表示诊断结果,以及事件发生的时间戳。完整的ICD9-CM编码参见http://www.icd9data.com/。
为了判断是否有疾病暴发,系统会按照地理位置来统计各种疾病代码在一段时间内出现的次数。为了简化例子,我们按城市划分诊断结果地理位置。实际系统会对地理位置做出更精细的划分。
另外,示例中会逐小时对诊断事件进行分组。实际系统会更倾向于使用滑动窗口,使用移动平均值来计算趋势。
最后,我们使用简单的阈值来判断是否有疾病暴发。如果某个小时事件发生的次数超过了阈值,系统会产生告警信息并且派遣应急人员。
为了维护历史记录,我们还需要将每个城市、小时、疾病的统计量持久化存储。