Flink 事件关联和回顾

问题描述

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

  1. 事件关联逻辑由基于输入流中的事件类型的静态规则组成。在最后 X 分钟内,将不同事件类型的事件关联起来,并根据这些规则输出具有业务价值的事件数据。例如,在最近1分钟,检查市场A1中事件类型A的价格
  2. 对于感兴趣/具有商业价值的事件,计算与最近 X 分钟的价格差异。例如,如果应用所有规则后,我们决定事件 A 在最后 1 分钟窗口内感兴趣,在将事件数据添加输出流之前,我们还想计算事件 A 与过去 10 分钟之间的价格差异。

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

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

解决方法

总的来说,您的选择是:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...