Flink 事件关联和回溯

Flink event correlation and lookback

我是 flink 的新手,正在寻找有关构建实时事件关联系统的建议。我有两个主要用例:

  1. 事件关联逻辑包含基于输入流中事件类型的静态规则。在最后 X 分钟内,关联不同事件类型的事件,并根据这些规则输出具有商业价值的事件数据。例如,在最近 1 分钟内,检查市场 A1 中事件类型 A 的价格是否 < 20,000 并且市场 M2 中事件类型 B 的价格是否小于 < 30,000,然后将事件 A 的数据添加到输出流,否则添加事件的数据B.
  2. 对于 interest/business 值的事件,计算与最后 X 分钟的价格差异。例如,如果 post 应用所有规则,我们决定在最后 1 分钟 window 对事件 A 感兴趣,然后在输出流中添加事件数据之前,我们还想计算事件 A 的价格差异从过去 10 分钟开始。

为了实现这些用例,我正在评估通过输入数据中的产品类型 ID 在输入流上应用密钥。这将为我提供针对不同市场的该产品的多种事件类型的数据,然后使用回顾期的滑动事件时间 window 说最后 10 分钟,滑动 window 为 1 分钟,并应用 ProcessWindowFunction 写入相关性最后 1 分钟的数据逻辑和使用其他 9 分钟的数据进行回顾并计算感兴趣事件的价格差异。

我不确定这是否是实现这些的最佳方式。任何 tips/recommendations 将不胜感激!

总的来说,我会说你的选择是:

  • 按照您的建议使用滑动 windows。
  • 使用 KeyedProcessFunction。这个较低级别的 API 提供了更多的控制,并可能导致更好的优化解决方案。有时这也更简单,所以如果您发现 window API 妨碍您,请考虑这个。
  • 使用 Flink SQL and/or Table API。如果用 SQL 编写规则,您可能会发现更容易表达和维护规则。也许 MATCH_RECOGNIZE 是相关的。