我在读书https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/event_timestamp_extractors.html#fixed-迟到的次数,看起来是在说如果
当事件时间等于水印时怎么样?如果t_eventime=t_waterwark
,那么这个事件不晚吗?
我以前一直认为如果t_eventime
请给我看看发生确定的代码,谢谢。
实际上,在这种情况下,确定事件是否延迟的代码似乎使用了<代码>
protected boolean isElementLate(StreamRecord<IN> element) {
return (windowAssigner.isEventTime())
&& (element.getTimestamp() + allowedLateness
<= internalTimerService.currentWatermark());
}
现在,为了完整性起见,请注意,您所引用的策略的水印本身的值计算为所看到的最新时间戳,减去“无序度”,再减去1。
public void onPeriodicEmit(WatermarkOutput output) {
output.emitWatermark(new Watermark(maxTimestamp - outOfOrdernessMillis - 1));
}
这意味着在上面的第一个片段中,用于比较的实际延迟时间比直觉告诉我们的延迟时间多1毫秒
现在这些参数是指我们认为我们的数据在现实世界中可能有多无序的估计,可能是由于网络竞争条件或不对齐的时钟等,并且我们在进行估计时通常比1 ms
精确得多。所以这一切都不应该那么重要:希望这样的情况在我们的数据中很少见,尽管由于数据本身的原因,有多少通常有点随机。
我很难理解水印和允许迟到的概念。 以下是[邮件存档]的摘录|https://www.mail-archive.com/user@Flink。阿帕奇。组织/msg08758。html]这谈到了水印,但我还有几个问题。以下是引用的示例: 假设您有一个,具有2分钟的绑定和10分钟的翻转窗口,从12:00开始到12:10结束: 如果您具有以下流序列: 不允许迟到 当窗口操作符接收到<代码> 允许迟到3分钟
在Flink中,我发现了2种设置水印的方法, 第一个是 第二个是 我想知道哪个最终会生效。
我想使用Flink的事件时间戳,并计划实现一个简单的emitWatermark,即系统。currentTimeInMillis-10秒。我的理解是,翻滚窗口将触发start\u time window\u间隔10秒。因此,如果事件晚于水印到达,则会删除这些事件。 有没有办法将Flink丢弃的所有事件写入S3这样的接收器?
我们正在接收来自多个独立数据源的事件,因此,到达我们Flink拓扑(通过Kafka)的数据将是无序的。 我们正在Flink拓扑中创建1分钟的事件时间窗口,并在源操作符处生成事件时间水印(当前事件时间-某些阈值(30秒))。 如果一些事件在设置的阈值之后到达,那么这些事件将被忽略(在我们的例子中这是可以的,因为属于该分钟的大多数事件都已经到达并在相应的窗口中得到处理)。 现在的问题是,如果程序崩溃(
我试图使用process函数对一组事件进行处理。我正在使用事件时间和键控流。我面临的问题是,水印值始终为9223372036854725808。我已经对print语句进行了调试,它显示如下: 时间戳------1583128014000提取时间戳1583128014000当前水印------9223372036854775808 时间戳------1583128048000提取时间戳1583128