一个窗口上有两种类型的触发器?

时间:2018-05-24 15:45:46

标签: apache-flink flink-streaming

我真的需要你的建议 在我的任务中,我需要通过两种类型的聚合来聚合事件。 第一种类型 - onCount,第二种类型 - onTime

如果事件是针对onCount聚合的,则事件的字段编号为numbertotalCount - 我们应该在聚合之前累积哪些事件数。

如果事件是针对onTime聚合的 - 它有字段time - 它是date之后我们应该获取所有累积事件并开始聚合。

我可以按类型分组事件,启动窗口并设置触发器:

stream
.keyBy(e => (e.clientSystemId, e.onMode))
.window(GlobalWindows.create())
.trigger(new WindowAggregationTrigger())

但是在触发器中我需要有状态 - 总计数或时间。 在最佳解决方案中 - 我需要两个不同的触发器 - 第一个是关于计数,第二个是关于时间聚合。

我的问题是 - 解决这个问题有多精彩? 当我需要两个具有不同逻辑的触发器时 - 首先是关于计数,第二个关于时间触发。

我不要求为我解决问题,我会征求意见。

我们在Apache Flink 1.4上开发。

1 个答案:

答案 0 :(得分:1)

不可能在同一窗口运算符中应用两个不同的触发器,但您可以实现单个触发器来区分onCountonTime个案例。

但是,我建议将流分成两个流(使用split()或侧输出),在分割的流上应用具有不同触发器的窗口运算符,然后将union()个流应用于一起(如果这是必要的)。