【问题标题】:Mule 4 Batch Process on large input file大型输入文件上的 Mule 4 批处理
【发布时间】:2021-04-09 05:37:57
【问题描述】:

我有一个巨大的文件,其中包含几十万到 500 万条记录。它的制表符分隔文件。我需要从 ftp 位置读取文件,对其进行转换,最后将其写入 FTP 位置。

我打算使用 FTP 连接器获取可重复流并将其放入 mule 批处理。内部 mule 批处理的想法是使用批处理步骤来转换记录,最后在批处理聚合 FTP 中以追加模式一次将 100 条记录写入目标。

第一季度。这是一个好方法还是有更好的方法?

第二季度。 mule 批处理加载和调度阶段是如何工作的 (https://docs.mulesoft.com/mule-runtime/4.3/batch-processing-concept#load-and-dispatch) 在调度 mule 批处理实例之前,它是否正在等待在内存中读取数百万条记录的整个流?

第三季度。在批量聚合中进行 FTP 写入时,并行线程有可能同时开始将内容附加到 FTP,从而破坏记录。这是可以避免的吗。我阅读了有关文件锁 (https://docs.mulesoft.com/ftp-connector/1.5/ftp-write#locks) 的信息。我的假设是它只会引发文件锁定异常,而不必等待以附加模式写入 FTP。

【问题讨论】:

    标签: mule mulesoft mule4


    【解决方案1】:

    第一季度。这是一个好方法还是有更好的方法?

    请参阅答案 Q3,这可能不适合您。您可以改为使用 foreach 并按顺序处理文件,但这会显着增加处理时间。

    第二季度。 mule 批量加载和调度阶段如何工作 (https://docs.mulesoft.com/mule-runtime/4.3/batch-processing-concept#load-and-dispatch ) 是否正在等待读入数百万条记录的整个流 调度 mule 批处理实例之前的内存?

    批处理不会在内存中加载大量记录,它使用基于文件的队列。是的,它会在开始处理之前加载队列中的所有记录。

    第三季度。在批量聚合中进行 FTP 写入时,有可能 并行线程将同时开始将内容附加到 FTP 从而破坏记录。这是可以避免的吗。我读了关于文件 锁 (https://docs.mulesoft.com/ftp-connector/1.5/ftp-write#locks) 。 我的假设是它只会引发文件锁定异常而不是 必须等待以附加模式写入 FTP

    如果文件已被锁定,则文件写入操作将引发 FILE:FILE_LOCK 错误。请注意,Mule 4 不通过异常管理错误,它使用 Mule 错误。

    如果您使用 DataWeave 平面文件来解析输入文件,请注意它会将文件加载到内存中并使用比文件本身更多的内存来处理它,因此您可能会遇到内存不足错误.

    【讨论】:

    • 我有一个 ffd 文件(平面文件)。 csv 与平面文件中的处理方式是否不同?可重复流选项是否不适用于一次流式传输一行。 For 循环需要 8 小时,需要提高性能,因此需要寻找更好的解决方案。
    • 平面文件在处理时的内存使用量可以是原始文件大小的 40 比 1。这记录在docs.mulesoft.com/mule-runtime/4.3/dataweave-formats-flatfile。您需要注意转换的内存使用情况。使用不可重复的流式传输可能会更好一些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多