java - 在 Flink SQL Windows 中使用带有延迟的事件时间

标签 java sql apache-flink

我的数据流通常是无序的。我将数据集定义为:

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();   

那么,如果我尝试在带有时间窗口(翻滚等)的 SQL 查询中使用它,它会如何工作,是否受到尊重?我认为我对这些概念的理解可能从根本上是错误的。但我假设迟到的事件将被删除,我可以使用我的行时间作为滚动窗口属性?

最佳答案

您可以控制how late events are treated在数据流 API 中。默认情况下,所有晚于 30 秒的事件都会被删除到代码中。这 30 秒会增加端到端延迟,因此输出会被阻止,直到 Flink 看到 30 秒的数据并尊重所有延迟事件。您还可以将延迟事件存储在单独的输出或重新触发计算中。

不幸的是,Table API/SQL 不支持此配置。迟到的事件总是会被丢弃,但这似乎足以满足您的用例。

关于java - 在 Flink SQL Windows 中使用带有延迟的事件时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60218235/

相关文章:

sql - 如何删除FK和所有从属表条目?

使用 MID() 的 Python SQLALCHEMY 查询

java - Flink 应用程序在 Java 中抛出类未找到异常

java - 如何动态添加一个hook而不需要太多的开销?

java - Android 简单选项卡和工具栏

java - 在 Web 应用程序中使用 twilio 进行语音通话

MySQL:如何根据最高修订号计算数据记录集?

apache-flink - 如何阻止高负载导致级联 Flink 检查点故障

java - 有没有办法将我的 Java 函数传递给 try-catch 函数?

java - 将参数传递给类,同时将类作为 `class literal` 传递