【问题标题】:Scala windowing data with Akka HTTP使用 Akka HTTP 的 Scala 窗口数据
【发布时间】:2018-12-17 05:40:47
【问题描述】:

我正在使用 Akka HTTP 在 post 请求中发送数据并将其累积在一个列表中。我需要对该数据执行一些规则,这些规则将对批次进行聚合。要创建批次,我需要将数据窗口化固定时间

我在 List 中的数据类似于,

 data = List(
  Map("a" -> 1.0, "b" -> 267.0, "c" -> 26.0, "d" -> 2.0,"time" -> 12345678293), Map("a" -> 1.0, "b" -> 2678.0, "c" -> 40.0, "d" -> 2.0,"time" -> 12345678293), Map("a" -> 4.0, "b" -> 267.0, "c" -> 26.0, "d" -> 2.0,"time" -> 12345678293), Map("a" -> 1.0, "b" -> 2678.0, "c" -> 90.0, "d" -> 17.0,"time" -> 12345678293),...
  )

时间在提供的纪元中

这个列表会随着时间不断增加

我的规则是这样的

 RuleName   function   WindowTime
   R1         sum(a)      5 Min
   R2         avg(b)      10 Min
   R3         StdDev(d)   30 Min
   ...         ...         ...

等等

忽略函数列,现在,我的问题是我有大约 200 条这样的规则,它们有不同的窗口时间。如何创建和管理这么多不同的窗口?如何触发事件,让规则按时执行

根据上面的示例,规则 R1 每 5 分钟执行一次,R2 每 10 分钟执行一次,所以,直到所有规则都不执行,我也不能使数据过期。请注意,当 R2 将执行时,R1 也会执行,因为 R1 已完成 5 分钟,而 R2 已完成 10 分钟。

我纯粹使用 Scala,Akka。

我也经历了drools,但我不知道drools如何管理不同窗口的这么多规则。

感谢任何想法和帮助。 提前致谢!

【问题讨论】:

  • 似乎是 Iteratee 模式的一个用例。但 Streams 也可能是一个粗略的解决方案。 Drools 仅对“规则表示”和“规则执行”有用。你的问题更多是关于规则的功能。

标签: java scala akka drools akka-http


【解决方案1】:
  1. 您可以将数据存储在某处(数据库、内存等)并配置 akka scheduler 以在一定间隔内调用特定计算
  2. 您可以使用 akka-stream 图(akka-http 流 + 广播 + groupedWithin 流)轻松组合所需的计算,但这可能会过度使用流

【讨论】:

  • 如果我将使用akka调度器,那么如何管理数据偏移量以及如何丢弃旧数据......因为每个规则都会消耗不同的窗口
猜你喜欢
  • 2017-08-01
  • 2015-08-20
  • 1970-01-01
  • 2022-01-10
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
相关资源
最近更新 更多