1. Flink模拟双十一实时大屏统计
在大数据的实时处理中,实时的大屏展示已经成了一个很重要的展示项,比如最有名的双十一大屏实时销售总价展示。除了这个,还有一些其他场景的应用,比如我们在我们的后台系统实时的展示我们网站当前的pv、uv等等,其实做法都是类似的。
今天我们就做一个最简单的模拟电商统计大屏的小例子,
需求如下:
1.实时计算出当天零点截止到当前时间的销售总额
2.计算出各个分类的销售top3
3.每秒钟更新一次统计结果
1.2 数据
首先我们通过自定义source 模拟订单的生成,生成了一个Tuple2,第一个元素是分类,第二个元素表示这个分类下产生的订单金额,金额我们通过随机生成。
编码实现步骤:
2.3 编码步骤
1.实时计算出当天零点截止到当前时间的销售总额
2.计算出各个分类的销售top3
3.每秒钟更新一次统计结果
- env
- source
- transformation 3.1定义大小为一天的窗口,第二个参数表示中国使用的UTC+08:00时区比UTC时间早 .keyBy(0) window(TumblingProcessingTimeWindows.of(Time.days(1), Time.hours(-8)) 3.2定义一个1s的触发器 .trigger(ContinuousProcessingTimeTrigger.of(Time.seconds(1))) 3.3聚合结果.aggregate(new PriceAggregate(), new WindowResult()); 3.4看一下聚合的结果 CategoryPojo(category=男装, totalPrice=17225.26, dateTime=2020-10-20 08:04:12)
- 使用上面聚合的结果,实现业务需求: result.keyBy(“dateTime”) //每秒钟更新一次统计结果 .window(TumblingProcessingTimeWindows.of(Time.seconds(1)))
//在ProcessWindowFunction中实现该复杂业务逻辑 .process(new WindowResultProcess()); 4.1. 实时计算出当天零点截止到当前时间的销售总额 4.2.计算出各个分类的销售top3 4.3.每秒钟更新一次统计结果- execute
2. Flink实现订单自动好评
- env
- source
- transformation 设置经过interval毫秒用户未对订单做出评价,自动给与好评.为了演示方便,设置5s的时间 long interval = 5000L; 分组后使用自定义KeyedProcessFunction完成定时判断超时订单并自动好评 dataStream.keyBy(0).process(new TimerProcessFuntion(interval)); 3.1定义MapState类型的状态,key是订单号,value是订单完成时间 3.2创建MapState MapStateDescriptor
mapStateDesc = new MapStateDescriptor<>(“mapStateDesc”, String.class, Long.class); mapState = getRuntimeContext().getMapState(mapStateDesc); 3.3注册定时器 mapState.put(value.f0, value.f1); ctx.timerService().registerProcessingTimeTimer(value.f1 + interval); 3.4定时器被触发时执行并输出结果 - sink
- execute