我对Apache Flink中的标点和定期水印有点困惑。
假设我有一个包含传入数据的DataStream,并且数据流类型所在的POJO
的时间戳字段始终按升序排列。
因此它类似于[{id: 1, ts: 12}, {id: 2, ts: 13}, ... , {id: 5, ts: 233445}]
我想知道在这种情况下使用哪种类型的水印分配器。我应该使用AscendingTimestampExtractor..
还是创建自定义的punctuated
?
答案 0 :(得分:0)
我从未遇到过在生产中需要使用标点水印的情况,但是有时我在进行实验时确实会使用标点水印,并且希望明确控制何时将水印插入流中。例如,由于涉及到开销,因此在每个事件之后放置水印是一个坏主意,但使用标点符号容易实现,这很容易导致计时器在流中的特定点触发。在生产中,我不会这样做,虽然在测试中希望具有这种级别的控制是合理的,但是有更好的方法可以做到这一点(例如,使用某种测试工具)。
标点符号水印背后的设计意图是用于在流中有特殊事件打算用作水印信号的情况。例如,上游作业可能已经在流中添加了水印,并使用水印将其写到Kafka,或者某些事件来自具有受信任时钟的设备,而其他事件则没有。