应该组合哪些处理器来处理 NiFi 中的大型 JSON 文件?

What processors should be combined to process large JSON files in NiFi?

我想设置一个 NiFi 工作流,用于提取大型 JSON 文档(介于 500 MB 和 3 GB 之间),这些文档已从 FTP 服务器 gzip 压缩,拆分 JSON 对象转换成单独的流文件,最后将每个 JSON 对象转换为 SQL 并将其插入到 MySQL 数据库中。

我是 运行 NiFi 1.6.0,在 Oracle Java 8 上,Java 设置了 1024 MB 堆 ​​space。

我目前的流量是:

GetFTP -> CompressContent -> SplitJson -> EvaluateJsonPath -> AttributesToJson -> ConvertJSONToSQL -> PutSQL

此流程非常适合 JSON 较小的文档。一旦大于 400 MB 的文件进入 SplitJson 处理器,它就会抛出 Java OutOfMemory 错误。我可以对现有流程进行哪些更改以使其能够处理大型 JSON 文档?

通常您会希望避免将每个文档拆分为一个流文件。如果您可以将多个文档放在一个流文件中,您将获得更好的性能。你会想看看 NiFi 的记录处理能力,具体你会想看看 PutDatabaseRecord。

下面是对记录处理方法的一个很好的介绍: https://www.slideshare.net/BryanBende/apache-nifi-record-processing

如果您绝对必须执行拆分为每个流文件的单个记录,那么您至少应该执行一个两阶段拆分,其中第一个拆分处理器拆分为每个流文件可能 10k-20k,然后是第二个拆分处理器将每个流文件拆分为 1 个。