apache-flink - 一个窗口上有两种类型的触发器?
问题描述
我需要你的建议,真的在我的任务中,我需要通过两种类型的聚合来聚合事件。第一种-是onCount
,第二种-是onTime
。
如果事件用于onCount
聚合 - 它具有字段数量 -number
事件,以及totalCount
- 我们应该在聚合之前累积多少事件。
如果事件用于onTime
聚合 - 它有字段time
-date
之后我们应该获取所有累积事件并开始聚合。
我可以按类型、启动窗口和设置触发器对事件进行分组:
stream
.keyBy(e => (e.clientSystemId, e.onMode))
.window(GlobalWindows.create())
.trigger(new WindowAggregationTrigger())
但在触发器中,我需要有状态 - 总计数或时间。在最佳解决方案中-我需要两个不同的触发器-第一个是关于计数,第二个是关于时间聚合。
我的问题是 - 解决这个问题有多漂亮?当我需要两个具有不同逻辑的触发器时——首先是关于计数,其次是关于时间触发器。
我不要求为我解决问题,我寻求建议。
我们在 Apache Flink 1.4 上开发。
解决方案
不可能在同一个窗口运算符中应用两个不同的触发器,但您可以实现一个触发器来区分onCount
和onTime
情况。
但是,我建议将流拆分为两个流(使用split()
或侧输出),在拆分的流上应用具有不同触发器的窗口运算符,然后union()
将流一起应用(如果有必要的话)。
推荐阅读
- node.js - 使用 npm、npm install x --save 或 npm install --save x 安装软件包?
- html - 使用asp.net向表中添加数据
- java - 错误:JRE/JDK 版本和类文件版本之间的差异
- javascript - 获取此滑块以自动播放
- python - np.exp 的点积问题
- c++ - CPP中没有明显原因的奇怪输出
- android - Basic Jetpack Compose Codelab 的“找不到具有此名称的参数:items”
- java - Spring Boot 连接到 Java 中的 MySQL 错误
- python - 了解列表迭代的工作原理
- reactjs - 如何使用 React Hooks 在 React 中填充对话