gpt4 book ai didi

apache-flink - Flink 流式处理 : How to process each event with all events of the last 30 days?

转载 作者:行者123 更新时间:2023-12-04 18:59:45 24 4
gpt4 key购买 nike

在键控流上,我想在新事件到达后立即为每个新传入事件计算一次窗口函数,同时为它提供过去 30 天内该键的所有早期事件的上下文作为迭代器.

预期的行为类似于具有 30 天长度和 1 纳秒滑动的滑动窗口,每个传入事件仅计算一次窗口函数。

我看不到如何在带有/不带有触发器/驱逐器等的内置翻滚/滑动/ session 窗口上映射此行为。

有人可以帮忙吗?或者这是否需要编写我自己的窗口分配器或我自己的键控状态处理?

最佳答案

你是对的,用 Flink 提供的窗口原语来建模你的用例并不容易。

我能想到的最佳解决方案是实现自定义运算符( OneInputStreamOperator )。这是一个相当低级的接口(interface),可以访问记录时间戳、水印和状态(Flink 的许多内置操作符都基于该接口(interface))。当收到一条新记录时,运算符(operator)会将其放入按时间戳排序的优先级队列中,删除早于 30 天的所有元素,然后对队列中的剩余元素评估函数。

请注意,队列应注册为托管状态,以使运算符(operator)具有容错性。如果要使用事件时间,则只能在收到水印时进行评估和删除数据。

实现 OneInputStreamOperator 时接口(interface),看看 Flink 的内置操作符可能会有所帮助,例如 StreamFilter或更复杂的之一。

自定义运算符可以应用于 DataStreamKeyedStream (由 DataStream.keyBy() 获得)使用 transform()方法。

关于apache-flink - Flink 流式处理 : How to process each event with all events of the last 30 days?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40432800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com