模拟场景:有多个温度计去采集温度,数据格式:温度计id,采集时间,温度值
实现一个报警策略:两次温度差值超过阈值,就报警。
要实现这个逻辑,必须要使用到状态,来记录上一次的温度。其实有三种方法:
- process function:这个在上一篇笔记中已经做过演示,这就不再演示了
- 自定义RichFlatMapFunction:由于要使用状态,所以必须用Rich版的Function
- flatMapWithState:直接调用带状态的FlatMap操作
代码如下:
import org.apache.flink.api.common.functions.RichFlatMapFunction
import org.apache.flink.api.common.state.{
ValueState, ValueStateDescriptor}
import org.apache.flink.configuration.Configuration
import org.apache.flink.streaming.api.scala._
import org.apache.flink.util.Collector
/**
* 状态的使用
* 模拟场景:温度计两次温度变化超过10度就报警
*/
object StateTest {
def main(args: Array[String