day7:分流案例【对船舶信号分流,速度大于15的走主流,小于15的走测输出流】【对日志分流,响应时间>1s走测输出流】

案例1:对传播信号进行分流,速度大于15的走主流,小于15的走测输出流

object splitAIS {
  def main(args: Array[String]): Unit = {
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    val KafkaConsumer: KafkaSource[String] = KafkaSource.builder[String]()
      .setBootstrapServers("192.168.126.51:9092,192.168.126.52:9092,192.168.126.53:9092")
      .setGroupId("zy")
      .setTopics("flink")
      .setStartingOffsets(OffsetsInitializer.latest())
      .setValueOnlyDeserializer(new SimpleStringSchema())
      .build()

    val value: DataStream[String] = env.fromSource(KafkaConsumer, WatermarkStrategy.noWatermarks(), "kafka")

    //    value.print()

    val value1: DataStream[aisCase] = value
      .filter(!_.contains("mmsi"))
      .map(x => {
        val strings: Array[String] = x.split(",")
        aisCase(strings(0), strings(1), strings(2), strings(3),
          strings(4).toDouble, strings(5), strings(6))
      })
      .process(new aisSplit)
    //分流操作不对数据做任何筛选操作

    //打印主流
    value1.print("高速")
    //打印测输出流
    value1.getSideOutput(new OutputTag[aisCase]("低速")).print("低速:")

    env.execute()

  }
}
class aisSplit extends ProcessFunction[aisCase,aisCase]{
  override def processElement(i: aisCase,
                              context: ProcessFunction[aisCase, aisCase]#Context,
                              collector: Collector[aisCase]): Unit = {
    if (i.speed<15){
      //走测输出流
      context.output(new OutputTag[aisCase]("低速"),i)
    }else {
      //走主流
      collector.collect(i)
    }
  }
}

案例2:对日志进行分流,响应时间>1走测输出流

object splitLog {
  def main(args: Array[String]): Unit = {
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    val KafkaConsumer: KafkaSource[String] = KafkaSource.builder[String]()
      .setBootstrapServers("192.168.126.51:9092,192.168.126.52:9092,192.168.126.53:9092")
      .setGroupId("zy")
      .setTopics("flink")
      .setStartingOffsets(OffsetsInitializer.latest())
      .setValueOnlyDeserializer(new SimpleStringSchema())
      .build()

    val value: DataStream[String] = env.fromSource(KafkaConsumer, WatermarkStrategy.noWatermarks(), "kafka")

    val value1: DataStream[(String, Double)] = value
      .map(x => {
        val strings: Array[String] = x.split(" ") //\t 是Tab大空格
        (strings(9), strings(6).toDouble)
      })
      .keyBy(_._1)
      .process(new logSplit)
    value1
    //打印主流
      .print("快响应:")
    env.execute()
  }
}
class logSplit extends KeyedProcessFunction[String,(String,Double),(String,Double)]{

  override def processElement(i: (String, Double),
                              context: KeyedProcessFunction[String, (String, Double), (String, Double)]#Context,
                              collector: Collector[(String, Double)]): Unit ={
    if (i._2>1){
      //走测输出流
      context.output(new OutputTag[(String,Double)]("慢响应"),i)
    }else{
      //走主流
      collector.collect(i)
    }
  }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值