繁体   English   中英

在 Flink 中使用具有延迟的事件时间 SQL Windows

[英]Using Event Time with lateness in Flink SQL Windows

我有一个数据 stream,一般都是乱序的。 我将数据集定义为:

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

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

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

遗憾的是,Table API/SQL 不支持此配置。 迟到的事件总是会被丢弃,但这对于您的用例来说似乎已经足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM