day2:【实时计算传感器的最高温度案例】【flink读取kafka手动输入数据】

【案例一:实时计算传感器的最高温度,一旦温度超过阈值,就发出报警】

*要求:在cmd中逐条输入数据,idea端接收数据并输出温度最高的数据字段,将时间戳转换为日期,格式为: (sensor_1,1970-01-19 05:55:18.199,35.8)

1、数据源字段格式是 (sensor_id,timestamp,temperature)

2、sensor_flink.scala

import org.apache.flink.api.scala._
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import java.text.SimpleDateFormat
import java.util.Date

object sensor_flink {
  def main(args: Array[String]): Unit = {
//    【实时计算传感器的最高温度,一旦温度超过阈值,就发出报警】
    //1-> 引入环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    //设置并行度为1
//    env.setParallelism(1)
    //2-> 读数据
    val value = env.socketTextStream("localhost", 1234)

    value
      //提取数据
      .map(x=>{
        //切数据
        val strings: Array[String] = x.split(",")
        //按照一定格式创建时间处理类SimpleDateFormat
        val format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
        //对时间戳进行格式化,format无法格式化字符串类型,需要转换为long类型
        val time: String = format.format(strings(1).toLong) 
        (strings(0),time,strings(2))
      })
      //分组
      .keyBy(_._1)
      //求最大值
      //.max()      //只会更新最新的温度数据
      .maxBy(2)  //可以更新最新的所有数据
      //求最小值
//      .minBy(2)
      .print()
    env.execute()
  }
}

【案例2:生成一个kafka消费者,flink读 kafka 数据】
手动输入生产者数据,flink消费数据。

1、在pom中添加依赖

<!--        Flink连接Kafka的依赖-->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-kafka_2.12</artifactId>
            <version>1.14.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
            <version>1.21</version>
        </dependency>

 2、创建read_kafka.scala 文件,生成一个消费者,接收kafka数据

import org.apache.flink.api.common.eventtime.WatermarkStrategy
import org.apache.flink.api.scala._
import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.connector.kafka.source.KafkaSource
import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment

object read_kafka {
  def main(args: Array[String]): Unit = {
//【读 kafka 数据】
//    1-> 引入流式环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment
//    2-> 读kafka数据
    //生成一个kafka的消费者
    val kafkaConsumer = KafkaSource.builder[String]()
      //设置kafka的地址
      .setBootstrapServers("192.168.126.51:9092,192.168.126.52:9092,192.168.126.53:9092")
      //设置组别,用来区分不同的人消费同一个主题的数据
      .setGroupId("paipai")
      //设置消费的主题
      .setTopics("flink")
      //设置是从头消费还是从最新位置开始消费
      .setStartingOffsets(OffsetsInitializer.earliest())
      //对value进行反序列化
      .setValueOnlyDeserializer(new SimpleStringSchema())
      //这个不能丢
      .build()

    //3-> 开始读数据
     val value = env
      .fromSource(kafkaConsumer, WatermarkStrategy.noWatermarks(), "kafka")
     value.print()
    //1-> 启动流式环境代码
    env.execute()
  }
}

3、在虚拟机中启动Kafka(先启动zookeeper)
        1)创建flink主题:kafka-topics.sh --create --zookeeper hadoop1:2181,hadoop2:2181,hadoop3:2181 --topic flink --partitions 2 --replication-factor 2

        2)在虚拟机中创建主题为flink的生产者

        3)在kafka生产者中输入数据

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值