生成大型 FlowFiles 时 Apache NiFi OutOfMemoryError

Apache NiFi OutOfMemoryError while generating large FlowFiles

我在 Centos 7 上使用 Apache NiFi 0.4.1 和 Java 7,并尝试根据一些传入数据创建流文件。由于生成的数据量很大,我 运行 陷入 "OutOfMemoryError: Java heap space" 异常。

据我所知,这是因为NiFi在写入流文件时提供的输出流是ByteArrayOutputStream,因此数据存储在内存中。我能理解为什么会发生这种情况,但我能够使用 GetFile/PutFile 来处理更大的文件(我尝试加载一个 10Gb 文件,记录其属性并将其写入不同的位置,这有效)。我在这里缺少什么吗?有没有办法编写更大的流文件?或者 NiFi 0.5.0 有什么改变可以帮助我吗?

注意:我不认为增加可用的 java 堆 space 的数量会解决我的问题

正如评论中所强调的那样,单元测试框架使用内容存储库的变体,其中所有内容都存储在内存中以提高测试速度。确实,如果内容很大,你就是在直接对堆施加压力。在实际应用中,这些项目通过流to/from磁盘读取to/from内容存储库。

如果扩展正在读取内存中的内容而不是对大文件使用流式传输,那么这些问题也可能出现在核心框架中。