【问题标题】:Multiple session windows of a single key单个键的多个会话窗口
【发布时间】:2021-12-29 13:18:46
【问题描述】:

我正在努力在 flink 中实现特定的自定义窗口。问题是这样的: 我有一个特定 ID 的键控流。对于流中的每个新元素,我需要为每个 ID 保存多个“会话窗口”。对于每个即将到来的元素,我需要确定该元素是否属于某个会话窗口,如果它不属于任何打开的会话窗口,我需要创建一个新的。会话窗口的归属是动态的并且受已经打开的会话窗口的影响,并且不能预先确定,就像额外的'key-by'。 任何人都知道如何实现类似的东西?

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: java stream apache-flink flink-streaming windowing


【解决方案1】:

Flink 的会话窗口基于 merging 窗口的抽象。每个新事件最初都放置在其自己的单例会话窗口中,然后合并所有重叠的窗口/会话。我认为您需要做的是扩展 EventTimeSessionWindows 窗口分配器(假设这些是您正在使用的事件时间窗口)并覆盖其 mergeWindows 方法。您需要研究 TimeWindow#mergeWindows 并弄清楚如何调整它以满足您的需求。

或者,您可以更深入地了解 DataStream Window API,并使用带有自定义 Trigger 和 Evictor 的 GlobalWindow,但我认为这可能会变得非常混乱。

另一种选择是在 API 堆栈中再下一层,并使用进程函数实现您自己的窗口化。 Flink 文档中有an example showing how to re-implement tumbling windows with a KeyedProcessFunction。虽然这种方法有时是个好主意,但以这种方式处理会话窗口可能具有挑战性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多