【问题标题】:Flink: Appending Windowed Aggregates to EventsFlink:将窗口聚合附加到事件
【发布时间】:2017-06-24 16:13:48
【问题描述】:

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

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

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

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

我希望有人可以回复一些简单的代码(甚至是伪代码),让我开始了解上述数据流的“加入”部分。如果我需要澄清,请告诉我。

【问题讨论】:

    标签: apache-flink flink-streaming


    【解决方案1】:

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

    如果事务是无序的并且如果您需要更加小心时间,那么您可能需要考虑使用CoProcessFunction 而不是CoFlatMap(不同之处在于CoProcessFunction 为您提供访问定时器服务)。如果您需要使用计时器来清除不再相关的键的过期状态,您可能还需要使用CoProcessFunction

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

    【讨论】:

    • 谢谢。我计划通过交易中的实体键(如帐号)加入。然后,我想通过确定事务时间介于哪个窗口开始/结束日期时间来选择要附加的聚合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多