我有一个用例,我从客户端接收事件,其中一些事件在逻辑上是相关的(属于单个会话),并且基于时间戳的事件之间有明确的顺序。
现在,我想构建一个解决方案,该解决方案应该继续聚合事件,直到以时间戳的递增顺序接收到特定组的最后一个。因此,如果收到不按顺序的事件,则应将其保留到收到之前的事件为止。然后,继续根据特定组的密钥将其存储在 HBase 等数据存储中。
问题是一次此类不完整组的数量可能达到数百万,并且需要能够支持快速附加到不完整组并保持接收到的事件无序的东西。我该怎么办?
我有一个用例,我从客户端接收事件,其中一些事件在逻辑上是相关的(属于单个会话),并且基于时间戳的事件之间有明确的顺序。
现在,我想构建一个解决方案,该解决方案应该继续聚合事件,直到以时间戳的递增顺序接收到特定组的最后一个。因此,如果收到不按顺序的事件,则应将其保留到收到之前的事件为止。然后,继续根据特定组的密钥将其存储在 HBase 等数据存储中。
问题是一次此类不完整组的数量可能达到数百万,并且需要能够支持快速附加到不完整组并保持接收到的事件无序的东西。我该怎么办?
您可以使用事件流处理或复杂事件处理框架http://en.wikipedia.org/wiki/Complex_event_processing。您编写一个查询/模式,将其加载到引擎中,为引擎提供事件,并且查询会在时间到来时不断更新或触发。
我喜欢 Codehaus Esper,它是开源的,但受限于无偿版本,例如,我必须实现事件存储并在应用程序启动时重新加载它们。另一种选择是 Drools Fusion,但我在 5 年前试用时发现它有问题。我最近正在研究 WSO2 CEP,但这件事严重缺乏记录。