Flink:将窗口聚合附加到事件

时间:2017-06-23 22:54:13

标签: apache-flink flink-streaming

非常对Flink来说是新手。我阅读了文档并使用了一些示例代码,但我很难开始满足我的要求。

我们希望使用Flink来维护窗口化聚合,作为事务监视应用程序的一部分。这些将使用滑动窗口定义。一个例子是:“过去5天中CASH交易的总金额”。这是我需要我的Flink应用程序做的事情: 1.通过阅读历史聚合和构建窗口来准备事务处理 2.对于每个新交易: 一个。使用新的事务数据更新窗口化聚合 湾找到与传入时间戳匹配的窗口,并将聚合值添加到事务中 C。通过RabbitMQ或Kafka接收器将增强的事务(原始字段+来自匹配窗口的聚合)发送到下游处理器

对于每个进入的交易,我想要一个(并且只有一个)包含原始交易字段和聚合的输出。

我看到了如何创建窗口分配器的代码以及逐步维护聚合的代码。我不确定如何将此连接回原始事务记录,从与事务日期戳匹配的窗口追加聚合值。这似乎是对我的某种联系,但我不知道如何在Flink中实现。

我希望有人能用一些简单的代码(甚至伪代码)回复,让我开始使用上述数据流的“join”部分。如果我需要澄清,请告诉我。

1 个答案:

答案 0 :(得分:0)

我并不完全清楚你打算如何将窗口与事务进行匹配,但总的来说,你可以将窗口化的聚合和事务流式传输到CoFlatMap,之后通过任何字段键入两个流将加入他们。您可以使用托管,键控状态来存储窗口化聚合,然后您可以将其加入到事务中。

如果交易是无序的,如果您需要更加小心时间,那么您可能需要考虑使用CoProcessFunction代替CoFlatMap(不同之处在于{ {1}}允许您访问计时器服务)。如果您需要使用计时器清除不再相关的密钥的过期状态,您可能还需要使用CoProcessFunction

Flink培训包括实施Low-latency, Deterministic, Event Time Join的练习,但这可能比您需要的要复杂得多,具体取决于您的要求。