Window 将聚合结果保存在内存中

Window That Keeps Aggregated Results In Memory

我正在使用 siddhi v4.1.10 来创建长 运行ning java 独立应用程序,该应用程序将处理来自多个文件的数据,将其聚合并将结果发送到消息代理。每天大约会有 90 GB 的文件,其中包含 1.3 亿条记录(每分钟最多 100 000 个事件)。从文件 recod 创建的每个事件都有大约 30 个字段。

例如:

define stream FileStream (time double, user_ip string, status string, bytes int, http_method string, url string, duration int, ... .);

应用程序应该能够 运行 数百个查询 根据日志文件中的时间聚合 1 分钟、5 分钟、10 分钟批次的数据。

例如:

来自 FileStream#window.externalTimeBatch(时间,60 秒) SELECT time, account_id, status_code, sum(bytes) A​​S bytes, count(requests) AS requests GROUP BY account_id, status_code, 时间插入rabbtmqstream

问题是批处理 window 将事件保存在内存中,直到时间结束。但我需要一个系统,它可以在一段时间内聚合事件,而不会在内存中保留任何事件。 siddhi有可能吗? 我考虑过 OutputRateLimiter 但无法扩展它。 请指教

使用 Siddhi 4.x 版本。当通过 timeBatch windows 完成聚合时,这不会存储事件 in-memory。在这种情况下,它只会将 运行 聚合值保留在内存中

或者,您也可以使用 aggregators 通过使用 in-memory 和数据库来聚合值。