案例:运输公司车辆超速实时监测

让我们想象一个车队管理解决方案,其中车队中的车辆启用了无线网络功能。每辆车定期报告其地理位置和许多操作参数,如燃油水平、速度、加速度、轴承、发动机温度等。公司管理层希望利用这一遥测数据流来实现一系列应用程序,以帮助他们在业务的运营和财务方面提高管理效率。

使用到目前为止我们所知道的Spark结构化流特性,我们可以实现其中许多用例,比如使用事件时间窗口来监控每天行驶的公里数,或者通过应用过滤器来找到燃油不足预警的车辆。下面我们要实现的是其中一个功能,即监控运输车辆是否超速。我们将创建一个简单的近实时的Spark结构化流应用程序来计算车辆每几秒钟的平均速度。

我们使用Kafka作为流数据源,将从Kafka的“cars”主题来读取这些事件。

val df: DataFrame = spark.readStream
      .format("kafka")
      .option("kafka.bootstrap.servers", "localhost:9092")
      .option("subscribe", "cars")
      .load()

请按下面的步骤实现。我们将先分步讲解,在最后给出完整的代码实现。

1. 创建模拟数据源

为了模拟车辆向我们发送传感器数据,我们将创建一个Kafka producer,它将id、speed、acceleration 和timestamp写入Kafka的“cars”主题。

会员登录


《Flink原理深入与编程实战》