如何在Flink Java API中的keyBy()之后获取DataStream密钥

时间:2019-07-08 11:09:38

标签: apache-flink flink-streaming

我正在从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)

如何获取之前指定的密钥?我没有将输入事件的键注入到累加器中,因为我感觉不好。

1 个答案:

答案 0 :(得分:1)

而不是

.aggregate(new MyAggregateFunction)

您可以使用

.aggregate(new MyAggregateFunction, new MyProcessWindowFunction)

,在这种情况下,ProcessWindowFunction的处理方法将与键一起传递,以及AggregateFunction和Context对象的预聚合结果以及其他可能相关的信息。有关更多详细信息,请参见ProcessWindowFunction with Incremental Aggregation上的文档部分。