[英]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.