我们可以使用Spark流进行基于时间的事件吗

时间:2019-01-06 10:49:02

标签: java apache-spark bigdata spark-streaming

我有如下要求

  1. 有多个设备根据设备配置生成数据。例如,有两个设备以自己的时间间隔生成数据,例如d1每15分钟生成一次,d2每30分钟生成一次
  2. 所有这些数据将被发送到Kafka
  3. 我需要使用数据并根据当前小时产生的值和下一个小时产生的第一个值对每个设备执行计算。例如,如果d1从12:00 AM-1:00 AM每15分钟产生一次数据,则计算基于该小时产生的值和从1:00 AM-2:00 AM产生的第一个值。如果该值不是从1:00 AM-2:00 AM产生的,那么我需要考虑12:00 AM-1:00 AM的数据并将其保存到数据存储库(时间序列)
  4. 像这样,会有“ n”个设备,每个设备都有自己的配置。在上述情况下,设备d1和d2每1小时就会产生一次数据。可能还有其他设备每3小时,6小时就会产生一次数据。

当前,此要求是用Java完成的。由于设备的增加以及计算的增加,我想知道是否可以将Spark / Spark Streaming应用于这种情况?有关此类要求的任何文章都可以共享,因此将有很大帮助。 >

1 个答案:

答案 0 :(得分:1)

如果(如果很大的话)计算将是针对设备的,则可以使用主题分区,并根据设备的数量来缩放分区的数量。邮件按每个分区的顺序发送,这是您需要了解的最强大的功能。

但是,请注意以下几点:

  • 主题的数量可能会增加,如果要减少,则可能需要清除主题并重新开始。
  • 为了确保设备均匀分布,您可以考虑为每个设备分配一个向导。
  • 如果计算不涉及某种机器学习库,并且可以用纯Java完成,那么为此最好使用普通的旧使用者(或Streams),而不是通过Spark-Streaming对其进行抽象。级别越低,灵活性就越大。

您可以检查。 https://www.confluent.io/blog/how-choose-number-topics-partitions-kafka-cluster