当前位置: 首页 > 知识库问答 >
问题:

Flink Streaming:如何使用过去30天的所有事件处理每个事件?

仉成益
2023-03-14

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

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

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

有人能帮忙吗?或者这需要编写自己的窗口赋值器或自己的键控状态处理吗?

共有1个答案

艾和通
2023-03-14

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

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

注意,队列应注册为托管状态,以使操作员具有容错能力。如果要使用事件时间,则只能在收到水印时计算和删除数据。

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

自定义运算符可以应用于DataStreamKeyedStream(通过DataStream.keyBy())使用转换()方法获得。

 类似资料:
  • 如何读取自创建以来该聚合的所有事件?

  • 我想使用Flink的事件时间戳,并计划实现一个简单的emitWatermark,即系统。currentTimeInMillis-10秒。我的理解是,翻滚窗口将触发start\u time window\u间隔10秒。因此,如果事件晚于水印到达,则会删除这些事件。 有没有办法将Flink丢弃的所有事件写入S3这样的接收器?

  • 我有多个自定义技能意图。我想处理取消所有自定义意图的事件。我怎么能得到取消被调用。 我们如何在node JS Alexa中处理这个问题

  • 本文向大家介绍如何使用JavaScript处理绑定事件?,包括了如何使用JavaScript处理绑定事件?的使用技巧和注意事项,需要的朋友参考一下 要使用JavaScript处理事件,请在任何元素上对鼠标单击事件使用click。 示例 您可以尝试运行以下代码,以了解如何使用JavaScript处理绑定事件:

  • 每个人 都。我一直在寻找这个问题,但我在这里没有找到它,所以我想它真的很简单。 我正在用JavaFX创建一个非常简单的应用程序,只需一个按钮。现在我想处理它的事件(如按下或释放),但当我在互联网上看到示例时,它们都使用匿名类(每个事件都有一个不同的类),这在我看来让代码变得肮脏。这就是为什么我想将事件处理程序放在一个单独的类中,并将它们添加到按钮中。 问题是我不知道我是否必须为每个事件创建一个不同

  • 我在视图布局中使用了三个EditText小部件,用于三个不同的过滤器。如果我输入其中一条,另一条文本不应该是空白的吗? 下面是我的片段: GenericTextWatcher方法: 当我运行这个程序并输入EditText时,logcat看起来是这样的: 03-03 15:25:39.616 25952-25952/com.xyz.abcI/art:显式并发标记扫描GC释放23671(1194KB)