首页 > 解决方案 > 我们可以将 Spark 流用于基于时间的事件吗

问题描述

我有如下要求

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

目前这个要求是在 Java 中完成的。由于设备随着计算量的增加而增加,我想知道Spark / Spark Streaming是否可以应用于这种情况?任何关于这类需求的文章都可以分享,这样会有很大的帮助。

标签: javaapache-sparkbigdataspark-streaming

解决方案


如果,这是一个很大的假设,计算将是设备方面的,您可以利用主题分区并根据设备数量扩展分区数量。消息按每个分区的顺序传递,这是您需要理解的最强大的想法。

但是,请注意一些话:

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

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


推荐阅读