在Flink中處理事件時間有兩種方式:Event Time和Processing Time。
示例代碼:
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
DataStream<MyEvent> stream = env.addSource(new MyEventSource())
.assignTimestampsAndWatermarks(new MyEventTimestampExtractor());
stream.keyBy(MyEvent::getKey)
.timeWindow(Time.minutes(1))
.reduce((a, b) -> a.count + b.count)
.print();
示例代碼:
env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime);
DataStream<MyEvent> stream = env.addSource(new MyEventSource());
stream.keyBy(MyEvent::getKey)
.timeWindow(Time.minutes(1))
.reduce((a, b) -> a.count + b.count)
.print();
根據實際業務需求和數據特點,選擇合適的事件時間模式來處理數據。 Event Time適合處理亂序和延遲數據,而Processing Time適合實時計算和簡單場景下的數據處理。