1 方案
1.创建记录用户消费的ConsumerMess类:包括三个属性:用户ID、消费金额、消费时间
case class ConsumerMess(userId:Int, spend:Double, Time:Long)
2.要求采用EventTime时间语义,可通过以下设置:
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
3.考虑到数据存在乱序的可能性,需要使用Watermark机制处理乱序数据,并设置允许的最大延迟时间。
- 使用固定时间间隔的Timestamp Assigner指定时间戳(ConsumerMess.Time)和Watermark(延迟2s)。
- 使用翻滚窗口,窗口长度为T=10s。
data.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor[ConsumerMess](Time.seconds(2)) {
override def extractTimestamp(element: ConsumerMess): Long = {
element.Time
}
})
.keyBy(_.userId)
.timeWindow(Time.seconds(10))
2 代码
package org.ourhome.streamapi
import org.apache.flink.streaming.api.TimeCharacteristic
import org.apache.flink.streaming.api.functions.timestamps.BoundedOutOfOrdernessTimestampExtractor
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Time
/**
* @Author Do
* @Date 2020/4/25 21:33
*/
object EventTImeTest {
def main(args: Array[String]): Unit =

最低0.47元/天 解锁文章
204

被折叠的 条评论
为什么被折叠?



