Flink DataStream的KeyedStream中的支持方法assignTimestampsAndWatermarks

时间:2016-10-09 03:02:57

标签: windows flink-streaming

我们使用flink处理来自kafka主题的数据,kafka主题中的数据来自大量物联网设备,我们根据设备ID的哈希码将这些设备哈希到不同的分区,因此每个分区都有来自许多设备的事件数据,这些事件数据包含" timestamp"," value"," deviceID"等等。我们想用flink来做这些数据的流处理,我们的规则是计算每个设备在20秒内的平均值。但这是一个问题,因为所有设备共享相同的时间戳和水印生成器,并且每个设备都有时钟偏差,偏差可能非常大,所以这打破了严格提升事件时间的规则,如果我们可以在KeyedStream中支持assignTimestampsAndWatermarks,那么所有那些问题可以解决。

示例代码:

DataStream<Order> timestampStream = orderStream.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessGenerator());

KeyedStream<Order, String> keyStream =  timestampStream.keyBy(new KeySelector<Order,String>() {
    public String getKey(Order value) throws Exception {
        return value.getId();
    }
});
keyStream.window(TumblingEventTimeWindows.of(Time.seconds(20)));

0 个答案:

没有答案