我有如下需求
- 有多个设备根据设备配置生成数据。例如,有两个设备以各自的时间间隔生成数据,假设 d1 每 15 分钟生成一次,d2 每 30 分钟生成一次
- 所有这些数据都将发送到 Kafka
- 我需要使用数据并根据当前小时生成的值和下一小时生成的第一个值对每个设备执行计算。例如,如果 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 的数据并将其保存到数据存储库(时间序列)
- 像这样会有“n”个设备,每个设备都有自己的配置。在上述场景中,设备 d1 和 d2 每 1 小时生成一次数据。可能还有其他设备每 3 小时、6 小时生成一次数据。
目前这个需求是用Java完成的。由于设备越来越多,计算量也越来越大,想知道Spark/Spark Streaming是否可以应用到这种场景?有这类需求的文章可以分享一下,会有很大的帮助。
最佳答案
如果(这是一个很大的假设)计算将按设备进行,您可以使用主题分区并根据设备数量扩展分区数量。消息按每个分区的顺序传送,这是您需要理解的最强大的想法。
但是,一些警告:
- 主题的数量可能会增加,如果你想减少你可能需要清除主题并重新开始。
- 为了保证设备统一分布,可以考虑给每个设备分配一个guid。
- 如果计算不涉及某种机器学习库并且可以在纯 Java 中完成,那么为此使用普通的旧消费者(或流)可能是个好主意,而不是通过 Spark-Streaming 将它们抽象化。级别越低,灵 active 越大。
你可以检查这个。 https://www.confluent.io/blog/how-choose-number-topics-partitions-kafka-cluster
关于java - 我们可以将 Spark 流用于基于时间的事件吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54060760/