事件关联与过滤 - 如何开始?
我有一个异步事件流,每个事件包含一些信息,比如:
- 机构(我这个解决方案可以服务的多个机构之一)
- 代理(每个机构中的多个代理之一)
- 服务对象(被一个或多个机构服务的人或组织)
- 日期和时间
- 分类数据(来自一个固定但庞大的标签集合的标签)
我需要做的事情是:
根据服务对象、日期时间和分类数据来关联事件,并创建一个合并的新事件。例如:
事件 #0021: { 机构='XYZ', 代理='ABC', 服务对象='MMN', 日期时间='12-03-2011/11:03:37', 分类数据='错过交付,不重复,无法追踪,孤儿' }
事件 #0193: { 机构='KLM', 代理='DAY', 服务对象='MMN', 日期时间='12-03-2011/12:32:21', 分类数据='错过交付,孤儿,丢失' }
事件 #1217: { 机构='KLM', 代理='CARE', 服务对象='MMN', 日期时间='12-03-2011/18:50:45', 分类数据='升级' }
在这里,我发现了3个事件,它们的时间间隔超过7小时,都是针对同一个服务对象(MMN),发生在一个特定的时间窗口内(比如24小时),并且有匹配或相关的分类数据。
最后,创建一个合并的新事件,代表从这些事件中得出的推论。
能够根据每个机构、每个服务对象,基于特定的分类数据标签(例如:错过交付)在一定时间内生成报告。这可以使用原始输入事件,或者合成的(推论)事件来完成。
虽然这现在不是一个要求,但未来很可能会出现,分类数据中的“标签”可能会在没有人工干预的情况下增长。所以不确定这是否应该被视为非结构化数据。
这也不是一个紧急需求,但将来可能需要识别事件发生的趋势/模式(即事件1导致事件2,事件2导致事件3)。
事件到达的速度可能非常快……每分钟可能有成千上万的事件,甚至更多。而且,我需要在一段时间内(大约一个月)存档原始/合成的事件。
我的解决方案需要基于开源软件组件(最好是)。到目前为止的一些研究指向复杂事件处理(CEP)、贝叶斯网络/分类、预测分析等方向。
我在寻找一些关于该采取什么方法的建议。我希望选择一个能满足我大部分目标、且难度/时间最小的路径,换句话说,“学习人工智能”或“正式统计方法”并不是我短期的目标 :-)
2 个回答
你的问题属于战术性的问题,而不是程序性的问题。这两种问题各有各的解决工具,如果你用程序性的方法去解决战术性的问题,那你会遇到很多麻烦。
为了更清楚地说明,当我说程序性的问题时,我指的是那种可以一步步执行的情况,比如先做X,然后做Y,最后做Z。而战术性的问题则不同,X、Y和Z可以在任何时候发生,你需要能够处理这些突发事件。
你在使用CEP(复杂事件处理)方面走在正确的道路上。你也可以考虑使用规则引擎。你没有提到你的开发环境是什么,但如果是Java的话,可以看看Jess。如果你想要一个功能强大且稳定的规则引擎,可以考虑Tibco Business Events。它非常强大且具备容错能力,但绝对不是免费的。