DataStream API 二 之 时间概念 与 Watermark
一.时间概念指定
事件时间(EventTime)
接入时间(Ingestion Time)
处理时间(Processing Time)
val env =StreamExecutionEnvironment.getExecutionEnvironent()
env.setStreamTimeCharateristic(TimeCharacteristic.EventTime)
二.EventTime 和 Watermark
2.1 指定Timestamps 生成 Watermark
2.1.1 在 SourceFunction 中直接定义
val input =List(("a",1L,1),("b",1L,1),("c",3L,1))
val source :DataStream[(String,Long,Int)]=enc.addSource(
new SourceFunction[(String,Long,Int)](){
overrride def run(ctx:SourceContext[(String,Long,Int)]):Unit={
input.foreach(value=>{
ctx.collectWithTimeStamp(value,value._2)
ctx.emitWatermark(new Watermark(value._2-1))
})
//设定默认Watermark
ctx.emitWatermark(new Watermark(Long.MaxValue))
}
override def cancel():Unit={}
})
2.1.2 用 Flink自带的 Timestamp Assigner
2.1.2.1 用 Ascending 升序模式Timestamp Assigner
适用于事件按顺序生成,没有乱序事件的情况。