我真的需要你的建议
在我的任务中,我需要通过两种类型的聚合来聚合事件。
第一种类型 - 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上开发。
答案 0 :(得分:1)
不可能在同一窗口运算符中应用两个不同的触发器,但您可以实现单个触发器来区分onCount
和onTime
个案例。
但是,我建议将流分成两个流(使用split()
或侧输出),在分割的流上应用具有不同触发器的窗口运算符,然后将union()
个流应用于一起(如果这是必要的)。