Apache Flink 1.2 - 窗口聚合的时间戳和水印分配

时间:2017-04-04 12:13:55

标签: java python apache-kafka apache-flink

我正在尝试构建一个数据流处理系统,我希望聚合最后一分钟从我的传感器发送的数据。传感器在sensor主题中将数据发送到Kafka服务器,并由Flink使用。

我正在使用带有KafkaPython库的Python生成器,我以JSON格式发送数据。在JSON中,theres是包含时间戳的字段sent。这个参数是使用int(datetime.now().timestamp())每10秒在Python中生成的,我知道这些参数以秒为单位返回一个unix格式的时间戳。

问题是系统什么都没打印!我做错了什么?

// set up the execution environment
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

// setting topic and processing the stream from Sensor
DataStream<Sensor> sensorStream = env.addSource(new FlinkKafkaConsumer010<>("sensor", new SimpleStringSchema(), properties))
                                     .flatMap(new ParseSensor()) // parsing into a Sensor object
                                     .assignTimestampsAndWatermarks(new AscendingTimestampExtractor<Sensor>() {
                                         @Override
                                         public long extractAscendingTimestamp(Sensor element) {
                                             return element.getSent()*1000;
                                         }
                                     });
sensorStream.keyBy(meanSelector).window(TumblingEventTimeWindows.of(Time.minutes(1))).apply(new WindowMean(dataAggregation)).print();

在我尝试完成这项工作的过程中,我发现方法.timeWindow()而不是.window()有效!更精确的是,我写了.timeWindow(Time.minutes(1))。 N.B。:尽管Flink跑了5分钟,窗口只打印了一次!

0 个答案:

没有答案