Flink 窗口、Scala泛型通配符、Flink 窗口的底层 API、解析 json 格式的数据

目录
  • Flink 窗口
    • Time Window
    • Session Window
    • Count Window
    • Flink 窗口的底层 API
      • 卡口过车需求案例
        • 解析 json 格式的数据
          • 导入 fastjson 依赖
          • fastJson解析json字符串
        • 实现需求

1、Time Window

时间窗口

2、Session Window

会话窗口

如果一段时间没有数据生成一个窗口

3、Count Window

统计窗口

Flink 窗口、Scala泛型通配符、Flink 窗口的底层 API、解析 json 格式的数据_第1张图片

窗口的使用需要先分组,因为需要针对某一个key去划分窗口

Time Window

窗口的使用需要先 keyBy ,再去划分窗口

package com.shujia.flink.window

import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.assigners.{SlidingProcessingTimeWindows, TumblingEventTimeWindows, TumblingProcessingTimeWindows}
import org.apache.flink.streaming.api.windowing.time.Time

object Demo1TimeWindow {
  def main(args: Array[String]): Unit = {

    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    val linesDS: DataStream[String] = env.socketTextStream("master", 8888)

    val kvDS: DataStream[(String, Int)] = linesDS.flatMap(_.split(",")).map((_, 1))

    /**
      * TumblingProcessingTimeWindows : 滚动(两个窗口没有交叉)的处理时间窗口
      * TumblingEventTimeWindows : 滚动的事件时间窗口,需要设置时间字段和水位线
      * SlidingProcessingTimeWindows : 滑动的处理时间窗口,滑动窗口需要指定窗口大小和滑动时间
      * SlidingEventTimeWindows : 滑动的事件时间窗口,需要设置时间字段和水位线
      */
      
    kvDS
      //窗口的使用需要先 keyBy ,再去划分窗口
      .keyBy(_._1)
      
      //需要传入一个时间的是滚动窗口,需要传入两个时间的是滑动窗口
      //.timeWindow(Time.seconds(5)) //处理时间的滚动窗口 -- 这样写是简写
      
      //完整写法:
      .window(SlidingProcessingTimeWindows.of(Time.seconds(15), Time.seconds(5)))
      .sum(1)
      .print()

    env.execute()

  }
}

Session Window

package com.shujia.flink.window

import org.apache.flink.streaming.api.TimeCharacteristic
import org

你可能感兴趣的:(scala,flink,json,大数据,java)