java - 我们可以将 Spark 流用于基于时间的事件吗

标签 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是否可以应用到这种场景?有这类需求的文章可以分享一下,会有很大的帮助。

最佳答案

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

但是,一些警告:

  • 主题的数量可能会增加,如果你想减少你可能需要清除主题并重新开始。
  • 为了保证设备统一分布,可以考虑给每个设备分配一个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/

相关文章:

java - 由于服务器一旦接受连接就会阻塞,我应该如何一起测试客户端和服务器?

mysql - Sqoop 语法错误,意外的 tIdentifier

hadoop - Hive ParseException - 无法识别 'end' 附近的输入 'string'

apache-spark - 关于 Apache Spark 上的 rdd.pipe() 运算符的问题

python - 按 Dataframe 中的位置替换数组中的元素 - Pyspark

python - 计算成对距离矩阵 : is a scalable, Python 中可用的大数据就绪方法?

java - 将字节保存到 xml 文件。无效的 Unicode 字符

java - 不幸的是 MyApp 已停止。我该如何解决这个问题?

java - 在 Java 中,为什么我不需要导入 RuntimeException 来使用它?

python - 具有多个参数的用户定义函数返回 NULL 值