Streaming 流式数据在文件和相当长的时间内进行复杂的事件处理

Streaming 流式数据在文件和相当长的时间内进行复杂的事件处理,streaming,complex-event-processing,Streaming,Complex Event Processing,我的挑战: 我们每天收到约20万条记录的文件。我们将文件保存约1年,以支持重新处理等 为了便于讨论,假设这是一种持久的实现过程,具有与记录相关联的供应ID 我们需要在这些文件中识别灵活的模式,并触发事件 典型问题包括: 如果记录A后接记录B,记录B后接记录C,且所有记录均在60天内发生,则触发事件 如果发现记录D或记录E,但记录F在30天内未出现,则触发事件 如果同时找到记录D和记录E(无论顺序如何),则后跟。。。在24小时内,然后触发事件 有些模式需要在DB/NoSql或联接中查找附加信

我的挑战:

  • 我们每天收到约20万条记录的文件。我们将文件保存约1年,以支持重新处理等
  • 为了便于讨论,假设这是一种持久的实现过程,具有与记录相关联的供应ID
  • 我们需要在这些文件中识别灵活的模式,并触发事件
  • 典型问题包括:
    • 如果记录A后接记录B,记录B后接记录C,且所有记录均在60天内发生,则触发事件
    • 如果发现记录D或记录E,但记录F在30天内未出现,则触发事件
    • 如果同时找到记录D和记录E(无论顺序如何),则后跟。。。在24小时内,然后触发事件
  • 有些模式需要在DB/NoSql或联接中查找附加信息,以选择记录或放入事件
  • “选择记录”可以是简单的“字段a等于”,也可以是“字段a在[]”或“字段a匹配”或“功能标识(字段a、字段B)”
  • “天”也可以是“小时”或“上个月”。因此比“天”更灵活。通常我们在记录中有一些日期/时间戳。当前最大值为“6个月内”(在设置阶段取消)
  • 创建的事件(最好是JSON)需要包含选择过程中所有记录的数据
  • 我们需要一种允许灵活更改(添加、修改、删除)模式的方法,可以选择重新处理输入文件
有没有关于如何优雅地解决这个问题的想法?可能是一些python或java框架,或者任何公共云解决方案(AWS、GCP、Azure)都能很好地解决问题空间吗


非常感谢您的帮助

经过一些讨论和阅读,我们将首先尝试使用FlinkCEP库的Apache Flink。从文档和博客条目来看,它似乎能够完成这项工作。这似乎也是AWS的选择,运行在他们的EMR集群上。我们在GCP和Azure上都没有找到提供这些功能的托管服务。当然,我们可以自己部署和管理它。不幸的是,我们没有找到Python框架

我建议您也看看Flink的SQL引擎,它支持模式识别的MATCH_Recognite标准(包括用于时间约束的非标准IN子句)。看见