事件关联与过滤 - 如何开始?

9 投票
2 回答
2338 浏览
提问于 2025-04-16 14:50

我有一个异步事件流,每个事件包含一些信息,比如:

  • 机构(我这个解决方案可以服务的多个机构之一)
  • 代理(每个机构中的多个代理之一)
  • 服务对象(被一个或多个机构服务的人或组织)
  • 日期和时间
  • 分类数据(来自一个固定但庞大的标签集合的标签)

我需要做的事情是:

  1. 根据服务对象、日期时间和分类数据来关联事件,并创建一个合并的新事件。例如:

    事件 #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小时),并且有匹配或相关的分类数据。

  2. 最后,创建一个合并的新事件,代表从这些事件中得出的推论。

  3. 能够根据每个机构、每个服务对象,基于特定的分类数据标签(例如:错过交付)在一定时间内生成报告。这可以使用原始输入事件,或者合成的(推论)事件来完成。

  4. 虽然这现在不是一个要求,但未来很可能会出现,分类数据中的“标签”可能会在没有人工干预的情况下增长。所以不确定这是否应该被视为非结构化数据。

  5. 这也不是一个紧急需求,但将来可能需要识别事件发生的趋势/模式(即事件1导致事件2,事件2导致事件3)。

事件到达的速度可能非常快……每分钟可能有成千上万的事件,甚至更多。而且,我需要在一段时间内(大约一个月)存档原始/合成的事件。

我的解决方案需要基于开源软件组件(最好是)。到目前为止的一些研究指向复杂事件处理(CEP)、贝叶斯网络/分类、预测分析等方向。

我在寻找一些关于该采取什么方法的建议。我希望选择一个能满足我大部分目标、且难度/时间最小的路径,换句话说,“学习人工智能”或“正式统计方法”并不是我短期的目标 :-)

2 个回答

1

你的问题属于战术性的问题,而不是程序性的问题。这两种问题各有各的解决工具,如果你用程序性的方法去解决战术性的问题,那你会遇到很多麻烦。

为了更清楚地说明,当我说程序性的问题时,我指的是那种可以一步步执行的情况,比如先做X,然后做Y,最后做Z。而战术性的问题则不同,X、Y和Z可以在任何时候发生,你需要能够处理这些突发事件。

你在使用CEP(复杂事件处理)方面走在正确的道路上。你也可以考虑使用规则引擎。你没有提到你的开发环境是什么,但如果是Java的话,可以看看Jess。如果你想要一个功能强大且稳定的规则引擎,可以考虑Tibco Business Events。它非常强大且具备容错能力,但绝对不是免费的。

2

迈克,

你有没有考虑过像Esper或Nesper这样的东西,看看它们是否能满足你的需求?我自己也看过类似的东西,特别是在Erlang上(你可以查看我在这里的帖子),你会发现一些有用的答案。

IC

撰写回答