代码之家  ›  专栏  ›  技术社区  ›  Mustafa

在Flink SQL窗口中使用事件时间和延迟

  •  0
  • Mustafa  · 技术社区  · 6 年前

    DataStream<ApplicationMetric> metrics = env
      .addSource(new FlinkKinesisConsumer<>("applicationMetric", new SimpleStringSchema(), consumerConfig))
      .map(mapper)
      .assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor<>(Time.seconds(30)));  
    

    打印为:

    Table table = bsTableEnv.fromDataStream(dataset, "createdAt, name, duration, rowtime.rowtime");
    Table t1 = bsTableEnv.sqlQuery("SELECT CAST((createdAt/1000) as TIMESTAMP) as ts, rowtime, name, duration " + table);
    bsTableEnv.toAppendStream(t1, Row.class).print();   
    

    0 回复  |  直到 6 年前
        1
  •  1
  •   Arvid Heise    6 年前

    how late events are treated 在数据流API中。默认情况下,30秒之后的所有事件都会被丢弃在代码中。这30秒增加了端到端的延迟,所以在Flink看到30秒的数据并尊重所有最近的事件之前,输出会被延迟。您还可以将延迟事件存储在单独的输出或重新触发计算中。

    不幸的是,表API/SQL不支持这种配置。延迟的事件总是会被删除,但这似乎对您的用例来说已经足够了。