【问题标题】:File Processing with Akka?使用 Akka 进行文件处理?
【发布时间】:2015-07-02 10:48:33
【问题描述】:

这是一个设计问题。我不知道如何在Akka中实现这一点

用户故事
- 我需要解析看起来像

的大文件(> 1000 万行)
2013-05-09 11:09:01 Local4.Debug    172.2.10.111    %MMT-7-715036: Group = 199.19.248.164, IP = 199.19.248.164, Sending keep-alive of type DPD R-U-THERE (seq number 0x7db7a2f3)
2013-05-09 11:09:01 Local4.Debug    172.2.10.111    %MMT-7-715046: Group = 199.19.248.164, IP = 199.19.248.164, constructing blank hash payload
2013-05-09 11:09:01 Local4.Debug    172.2.10.111    %MMT-7-715046: Group = 199.19.248.164, IP = 199.19.248.164, constructing qm hash payload
2013-05-09 11:09:01 Local4.Debug    172.2.10.111    %ASA-7-713236: IP = 199.19.248.164, IKE_DECODE SENDING Message (msgid=61216d3e) with payloads : HDR + HASH (8) + NOTIFY (11) + NONE (0) total length : 84
2013-05-09 11:09:01 Local4.Debug    172.22.10.111   %MMT-7-713236: IP = 199.19.248.164, IKE_DECODE RECEIVED Message (msgid=867466fe) with payloads : HDR + HASH (8) + NOTIFY (11) + NONE (0) total length : 84
  • 对于每一行,我需要生成一些Event,这些Event 将被发送到服务器。

问题
- 如何在Akka 模型中有效地读取此日志文件?我读到同步读取文件更好,因为磁带移动更少。
- 在这种情况下,每个文件可能有FileReaderActor,它会读取每一行并将它们发送给处理,比如说EventProcessorRouterRouter 可能有很多演员在处理line(来自文件)并创建@ 987654329@。每个line会有1个Event
- 我也在考虑批量发送Events 以避免网络中的数据传输过多。在这种情况下,我应该在哪里继续积累这些Events?我怎么知道我所有的Events 都是从inputFile 生成的?

谢谢

【问题讨论】:

  • 嗨,您是否设法做到了这一点。你能分享一些线索或代码吗

标签: java akka


【解决方案1】:

我想我知道你在问什么,你基本上是在说,如果你以你所描述的方式阅读和处理一个文件,如果处理时间比阅读时间长得多,那么你就有可能收到大量消息。此外,如果您在理想情况下通过网络发送消息,您可能希望尽量减少要发送的消息量。如果您的线路不需要很长时间来处理,那么我不会将它们发送到网络上进行处理。 您是否考虑过使用期货? 不知道您的情况是否像Parallel File Processing: What are recommended ways? 那样简单,在这种情况下您应该使用流。但我认为这与演员有关,尽管他们有利于限制他们的主要目的是结束状态,而处理文件并没有那么多。也许你对期货会更好,我在这里展示了一个例子Executing Dependent tasks in parallel in Java。但是你可以像你说的那样使用演员,让处理演员与阅读演员沟通,并告诉它停止阅读,让我们说,一旦等待处理的消息数量超过 1000000 或你决定的数量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多