我正在从Flink流媒体应用程序中的Kafka集群中读取内容。获取源流后,我想通过组合键和timeEvent滚动窗口聚合事件,然后将结果写入表。 问题是,在应用了我的仅由clientId计算的点击次数的aggregationFunction之后,我没有找到获取每个输出记录的键的方法,因为api返回的是累积结果的实例,而不是对应的键。
DataStream<Event> stream = environment.addSource(mySource)
stream.keyBy(new KeySelector<Event,Integer>() {
public Integer getKey(Event event) { return event.getClientId(); })
.window(TumblingEventTimeWindows.of(Time.minutes(1))).aggregate(new MyAggregateFunction)
如何获取之前指定的密钥?我没有将输入事件的键注入到累加器中,因为我感觉不好。
答案 0 :(得分:1)
而不是
.aggregate(new MyAggregateFunction)
您可以使用
.aggregate(new MyAggregateFunction, new MyProcessWindowFunction)
,在这种情况下,ProcessWindowFunction的处理方法将与键一起传递,以及AggregateFunction和Context对象的预聚合结果以及其他可能相关的信息。有关更多详细信息,请参见ProcessWindowFunction with Incremental Aggregation上的文档部分。