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

Apache flink Flink:将窗口聚合附加到事件,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我对弗林克很陌生。我阅读了文档并使用了一些示例代码,但是我很难开始满足我的需求 我们希望使用Flink作为事务监控应用程序的一部分来维护窗口聚合。这些将使用滑动窗口定义。例如:“过去5天的现金交易总额”。以下是我需要Flink应用程序执行的操作: 1.通过读取历史汇总和构建窗口为事务处理做好准备 2.对于每个新交易: A.使用新事务数据更新窗口聚合 B找到与传入时间戳匹配的窗口,并将聚合值添加到事务中 C通过RabbitMQ或Kafka接收器将增强的事务(原始字段+匹配窗口中的聚合)发送到下游处

我对弗林克很陌生。我阅读了文档并使用了一些示例代码,但是我很难开始满足我的需求

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

对于传入的每个事务,我希望有一个(并且只有一个)输出包含原始事务字段和聚合

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


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

我不完全清楚您打算如何将窗口与事务相匹配,但一般来说,您可以将窗口聚合和事务流化到一个
CoFlatMap
,然后通过要加入它们的任何字段键入这两个流。您可以使用托管的键控状态来存储窗口聚合,然后将其加入到事务中

如果事务不符合顺序,并且您需要更加注意时间,那么您可能需要考虑使用
协处理函数
而不是
协处理映射
(区别在于
协处理函数
允许您访问计时器服务)。如果需要使用计时器清除不再相关的键的过期状态,可能还需要使用
协处理函数


Flink培训包括一个关于实施的练习,但这可能比您需要的要复杂得多,具体取决于您的需求。

谢谢。我计划通过交易中的实体密钥(如帐号)加入。然后,我想通过确定事务时间介于哪个窗口开始/结束日期时间之间来选择要追加的聚合。