17.Flink开发笔记二

1. WindowFunction

在这里插入图片描述

2. Watermark

在这里插入图片描述
在这里插入图片描述

2.1. 分布式的Watermark

在这里插入图片描述

2.2. DataStream和其他流之间的转换

在这里插入图片描述

2.3. Window的抽象概念

在这里插入图片描述

2.4. Window Trigger

在这里插入图片描述

2.5. Window Evictor

在这里插入图片描述
在这里插入图片描述

2.6. 1.11版本Watermark写法

    val dataStream: DataStream[LoginEvent] = inputStream
      .map {
   
        data => {
   
          val arr: Array[String] = data.split(",")
          LoginEvent(arr(0).toLong, arr(1), arr(2), arr(3).toLong)
        }
      }
      .assignTimestampsAndWatermarks {
   
        WatermarkStrategy
          .forBoundedOutOfOrderness[LoginEvent](Duration.ofSeconds(3))
          .withTimestampAssigner(new SerializableTimestampAssigner[LoginEvent] {
   
            override def extractTimestamp(element: LoginEvent, recordTimestamp: Long): Long = element.timestamp * 1000L
          })
      }
  • 注意: scala2.11有点问题,需要配置
    参考链接

3. State 状态管理

3.1. 算子状态(operator state)

在这里插入图片描述
在这里插入图片描述

3.2. 键控状态(keyed state)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.3. 状态编程

val inputStream: DataStream[String] = env.socketTextStream("192.168.1.27", 9999)

val dataStream: DataStream[SensorReading] = inputStream.map(
  data => {
   
    val arr: Array[String] = data.split(",")
    SensorReading(arr(0), arr(1).toLong, arr(2).toDouble)
  }
)

// 需求:对于传感器温度值跳变,超过“10”度进行报警
val warningStream: DataStream[(String, Double, Double)] = dataStream
  .keyBy(_.id)
  // 方式1 .flatMap(new TimeChangeAlert(10.0))
  // 方式2  (R, S) 有状态的函数(只能在keyBy之后使用) fun: (T, Option[S]) => (TraversableOnce[R], Option[S])
  .flatMapWithState[(String, Double, Double), Double] {
   

    case (data: SensorReading, None) => (List.empty, Some(data.temperature))

    case 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值