"时间" 对于flink来说是非常重要的,大致可以分成两大类:事件时间和处理时间(flink的时间语义)
事件事件:一个数据产生的事件(比如2.30分下单操作,事件时间就为2.30分)
处理时间:flink拿到数据,开始处理,指数据正在被处理的时刻
为什么会有这两种时间?
因为数据在网络中传输是具有延迟的,或因某些别的外部原因等。通俗例子,买了牛奶,不一定当天喝。买牛奶这个事件发生的时间为事件时间。喝牛奶这个时间为处理时间。
零点漂移
前一天23:59:59发送过来的数据,但是由于延迟发送到了下一天的分区,这条数据就具有偏差(离线数仓经典问题)。对于flink,具有事件时间,这个时间点是比较重要的,是保证计算结果准确的重要因素
那这两种时间语义哪个更重要呢?
在实际生产应用中,事件时间语义可能更为常见。一般情况下,业务日志数据中都会记录数据生成的时间戳(timestamp),它就可以作为事件时间判断的基础。
在flink1.12版本开始,就将事件时间作为默认的时间语义了