【问题标题】:Using NEsper to read LogFiles for reporting purposes使用 NEwspaper 读取日志文件以进行报告
【发布时间】:2018-08-16 09:30:39
【问题描述】:

我们正在评估 NEsper。我们的重点是监控企业环境中的数据质量。在一个应用程序中,我们将记录很多字段的每一个变化——例如在一个“订单”中。所以我们有像

这样的字段
  • 收货人姓名
  • 收货人街道
  • 订购日期

....还有更多领域。可以想象,日志文件会变大。

由于数据是由不同的客户发送并在应用程序中导入的,所以我们要分析有多少(以及哪些)字段从“无值”更新为“有值”(仅作为示例)。

我试图用字段构建一个测试用例

  • 订单参考
  • 字段名
  • 字段值

对于我的测试用例,我添加了两个带有上下文信息的语句。第一个应该只计算每个订单的一般变化:

epService.EPAdministrator.CreateEPL("create context RefContext partition by Ref from LogEvent");
var userChanges = epService.EPAdministrator.CreateEPL("context RefContext select count(*) as x, context.key1 as Ref from LogEvent");

第二条语句应该计算从“无值”到“有值”的更新:

epService.EPAdministrator.CreateEPL("create context FieldAndRefContext partition by Ref,Fieldname from LogEvent");
var countOfDataInput = epService.EPAdministrator.CreateEPL("context FieldAndRefContext SELECT context.key1 as Ref, context.key2 as Fieldname,count(*) as x from pattern[every (a=LogEvent(Value = '') -> b=LogEvent(Value != ''))]");

要读取测试日志文件,我使用 csvInputAdapter:

CSVInputAdapterSpec csvSpec = new CSVInputAdapterSpec(ais, "LogEvent");
csvInputAdapter = new CSVInputAdapter(epService.Container, epService, csvSpec);
csvInputAdapter.Start();

我不想使用更新监听器,因为我只对所有事件的结果感兴趣(可能这是不可能的,这是我的失败)。

所以在读取 csv(csvInputAdapter.Start() 返回)后,我读取了所有事件,这些事件存储在语句 NewEvents-Stream 中。

在 CSV 文件中使用 10 个条目一切正常。使用 100 万行需要很长的时间。我尝试不使用 EPL-Statement(所以只是导入 CSV) - 大约需要 5 秒。对于第一个语句(不是复杂的模式语句),我总是在 20 分钟后停止 - 所以我不确定需要多长时间。

然后我更改了第一条语句的 EPL:我引入了 group by 而不是 context。

select Ref,count(*) as x from LogEvent group by Ref

现在它真的很快 - 但是在 CSVInputAdapter 返回后我的 NewEvents Stream 中没有任何结果...

我的问题:

  1. 我想使用 NEsper 的方式是受支持的用例还是我失败的根本原因?

  2. 如果这是一个有效的用例:我的错误在哪里?如何以高效的方式获得我想要的结果?

  3. 当使用“group by”而不是“context”时,为什么我的 EPL 语句中没有 NewEvents?

【问题讨论】:

    标签: complex-event-processing logfile nesper


    【解决方案1】:

    对 1),是的

    至 2) 这是有效的,您的 EPL 设计可能有点低效。您可能希望通过使用过滤索引和索引条目来了解模式的工作原理,这些索引和索引条目的创建成本更高,但在丢弃不需要的事件方面非常快。 读: http://esper.espertech.com/release-7.1.0/esper-reference/html_single/index.html#processingmodel_indexes_filterindexes 还有 http://esper.espertech.com/release-7.1.0/esper-reference/html_single/index.html#pattern-walkthrough 试试“以前的”也许。分别衡量每个语句的性能。 此外,我不认为 CSV 适配器针对处理大文件进行了优化。我认为 CSV 可能无法流式传输。

    到 3) 检查您的代码?不要将 CSV 文件用于大型文件。确保连接了监听器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-17
      • 2015-08-07
      • 2012-06-29
      • 2018-11-09
      • 1970-01-01
      • 2018-12-21
      • 2012-09-09
      • 2019-11-01
      相关资源
      最近更新 更多