如何在 NiFi 中创建 GZIP 包?

How do I create a GZIP bundle in NiFi?

我有数以千计的文件,我想将它们压缩在一起以提高发送效率。我使用了 MergeContent,但这会创建 zip 文件,而不是 GZIP。另一端的系统只在寻找 GZIP。我可以使用 CompressContent 创建单个 GZIP 文件,但这对于通过网络发送来说效率不高。我还需要在单个文件上保留 headers,这就是我想使用 MergeContent 的原因。

我可以将文件作为流文件包写入磁盘,运行一个脚本,获取结果,然后发送,但我认为我可以在 NiFi 中做到这一点而无需写入磁盘。

有什么建议吗?

您混淆了压缩和归档。

Tar 或 Zip 是将 1 个或多个输入文件归档到单个输出文件中的方法。例如。 file1.txt、file2.txt 和 file3.txt 是归档到 files.tar 中的单独文件。当您解压缩归档文件时,您会恢复所有 3 个文件的原样。存档不一定是压缩的。

GZIP 是一种压缩方法,目的是减小文件的大小。它需要 1 个输入,对其进行压缩,然后给出 1 个输出。例如。你输入 file1.txt 即 100Kb,你压缩它,你得到 file1.txt.gz 即 3Kb.

MergeContent 是 merging,因此可以生成像 ZIP 和 TAR 这样的压缩文件。 不是压缩。

CompressContent 是compressing,因此它可以生成类似GZIP 的压缩文件。 不是合并。

如果您想像 tar.gz 一样将许多文件组合成一个 压缩存档 ,那么您可以使用 MergeContent (tar) > CompressContent (gzip) .这将首先将所有输入的 FlowFiles 存档到一个 tar 文件中,然后 GZIP 将 tar 压缩成一个 tar.gz.

有关压缩与归档的更多详细信息,请参阅此答案:

(注意:MergeContent 在使用它创建 ZIP 时有一个可选的压缩标志,因此在那个特定的 use-case 中它也可以对存档应用一些压缩,但它只是 对于 zip)