问题描述
我是 flink 的新手,正在寻找有关构建实时事件关联系统的建议。我有两个主要用例:
- 事件关联逻辑由基于输入流中的事件类型的静态规则组成。在最后 X 分钟内,将不同事件类型的事件关联起来,并根据这些规则输出具有业务价值的事件数据。例如,在最近1分钟,检查市场A1中事件类型A的价格
- 对于感兴趣/具有商业价值的事件,计算与最近 X 分钟的价格差异。例如,如果应用所有规则后,我们决定事件 A 在最后 1 分钟窗口内感兴趣,在将事件数据添加到输出流之前,我们还想计算事件 A 与过去 10 分钟之间的价格差异。
为了实现这些用例,我正在评估在输入流上按输入数据中的产品类型 Id 应用密钥。这将为我提供针对不同市场的该产品的多种事件类型的数据,然后使用回溯期的滑动事件时间窗口(例如,过去 10 分钟,滑动窗口为 1 分钟)并应用 ProcessWindowFunction 为最后 1 分钟的数据编写关联逻辑和使用其他 9 分钟的数据进行回顾并计算感兴趣事件的价格差异。
我不确定这是否是实现这些的最佳方式。任何提示/建议将不胜感激!
解决方法
总的来说,您的选择是:
- 按照您的建议使用滑动窗口。
- 使用
KeyedProcessFunction
。这个较低级别的 API 提供了更多的控制,并可能导致更好的优化解决方案。有时这也更简单,所以如果您发现窗口 API 妨碍了您,请考虑这个。 - 使用 Flink SQL 和/或 Table API。如果规则是用 SQL 编写的,您可能会发现更容易表达和维护规则。也许 MATCH_RECOGNIZE 是相关的。