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

Apache Flink:即使没有输入记录到达给定聚合窗口,也会基于键控状态在Flink中发出输出记录

邢运良
2023-03-14

我正在尝试将Apache Flink用于IoT应用程序。我有一堆设备可以处于几种状态之一。当设备更改状态时,它会发出一条消息,其中包括事件时间戳和它更改到的状态。对于一个设备,可能如下所示:

{device_id:1,event_timestamp:9:01,state:STATE_1}

我的问题是:Flink只会为给定的device_id打开一个窗口,如果该窗口有一个事件。这意味着,如果设备超过5分钟没有改变状态,则不会有记录进入流,因此窗口不会打开。然而,我需要发出一条记录,说明设备在当前状态下花费了整整五分钟,这是基于键控状态下html" target="_blank">存储的内容。例如,Flink应该发出一条9:05-9:10的记录,该记录显示id为“1”的设备在“state_2”中度过了全部300秒。

是否有一种方法可以输出每个设备在五分钟聚合窗口中处于给定状态的时间量的记录,即使在这五分钟内状态没有改变,因此设备没有发送任何事件?如果没有,是否有任何变通方法可以用于获取应用程序所需的输出事件?

共有1个答案

易成天
2023-03-14

实现这一点的一种简单方法是使用ProcessFunction而不是窗口化。您可以保持任何对您的应用程序方便的键控状态,并使用计时器触发生成定期报告。

 类似资料:
  • 在Flink中,是否可以计算键控窗口的聚合输出? 我们有一个数据流,我们调用byKey()指定一个由字符和数字组成的字段(例如A01、A02…A10、B01、B02…B10等),就像棋盘上的方块一样。在之后,我们调用,因此我们创建了一个每周窗口。在此之后,我们调用,结果我们得到了

  • 我们有一个数据流,其中每个元素都属于这种类型: 我们希望聚合此流并每周输出一次的总和。 当前解决方案: flink管道的示例如下所示: 输入 如果窗口在记录和之间结束,我们的输出将是: Id和仍将在flink管道中,并将在下周输出。 因此,下周我们的总产量将是: 新规定: 我们现在还想知道每个记录在哪一周被处理。换句话说,我们的新产出应该是: 但我们还需要这样的额外输出: 这个怎么处理? Flin

  • 问题内容: 我通过Stata学习了数据操纵和分析,并使用log命令记录了所有写入的命令和生成的输出。这样做可以重现我的发现,检查以前的结果并与其他人共享pdf或txt。在Python中使用什么?如果我使用Python Jupyter Notebook或Spyder有区别吗? 问题答案: 执行所需操作的方法是使用命令,如下所述: 记录IPython输出?

  • 我想使用早期触发逻辑进行窗口聚合(您可以认为聚合是由窗口关闭或特定事件触发的),我阅读了文档:https://ci . Apache . org/projects/flink/flink-docs-release-1.12/dev/stream/operators/windows . html # incremental-window-aggregate-with-aggregate functi

  • 问题内容: Go语言中有没有办法记录到不同级别的多个输出? 我希望有一个程序可以同时在Info级别记录到stdout并在带有时间戳的调试级别记录一个文件。 就像我每次编写代码一样: 我可以看到控制台打印: 和一个文件: 我使用logrus和glog,但是找不到此功能。还有其他包装或我可以编码的东西吗? 问题答案: Go-logging支持不同的日志记录后端,例如文件,syslog等。可以设置多个后

  • 现在,你已经在运用 MATLAB 的命令行了,输入命令语句,就会看到结果出现在命令窗口中。 这一节介绍如何: 控制输出值的格式 用MATLAB命令隐藏输出 在命令行中输入长的命令 编辑命令行