在记忆中保持聚合结果的窗口

时间:2018-03-21 14:10:22

标签: complex-event-processing siddhi

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

例如:

定义流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)AS bytes,count(requests)AS requests GROUP BY account_id,status_code,时间插入rabbtmqstream

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

1 个答案:

答案 0 :(得分:0)

使用Siddhi 4.x版本。当通过timeBatch窗口进行聚合时,这不会将事件存储在内存中。在这种情况下,它只会将正在运行的聚合值保留在内存中

或者,您也可以使用aggregators来聚合使用内存和数据库的值。