在压缩输入上使用ConvertRecord

时间:2019-07-12 10:55:41

标签: zip compression apache-nifi

Apache NiFi中,我可以输入一个带有压缩数据的输入,该数据已使用UnpackContent处理器解压缩,然后将输出连接到进一步的记录处理或其他方式。

是否可以直接在压缩输入上进行操作?在正常的编程环境中,可以很容易地将记录处理器包装在一个容器中,该容器或多或少以流处理方式透明地拆包数据。

如果开箱即用不支持此功能,是否有理由实施一个扩展了ConvertRecord的处理器以接受压缩输入?

这样做的动机是有效处理大型CSV数据文件,将其转换为二进制记录格式,而不必将未压缩的CSV数据洒到磁盘上。

1 个答案:

答案 0 :(得分:0)

当前不支持用于记录处理的压缩输入,但是这是一个改进的好主意。 除了建议在特定的处理器(例如ConvertRecord)上实现之外,我建议采用以下两种方法:

  1. 创建实施RecordReaderFactory的CompressedRecordReaderFactory
    • 像Java压缩流(例如GZIPInputStreawm)一样,CompressedRecordReaderFactory将包装另一个RecordReaderFactory,用户指定压缩类型(否则读取器工厂可以通过查看FlowFile属性来实现自动检测功能……等)
    • 这种方法的好处是,一旦添加了它,我们就可以支持使用Record api在任何现有的RecordReader和Processors上读取压缩的输入流,不仅包括CSV,还包括XML,JSON等。
  2. 在每个RecordReaderFactory(例如CSVReader)处包装InputStream
    • 我们可以在每个RecordReaderFactory上实现相同的事情,并逐渐支持压缩输入
    • 这可以提供更好的用户体验,因为无需配置其他ControllerService

您如何看待?为了进一步讨论,我建议创建一个NiFi JIRA票证。如果您愿意做出贡献,那就更好了。