|
NiFi supports files of all sizes and formats. However, when considering bulk ingest and handling of large files, this can create suboptimal patterns on ingest of data. Consider the case of a multi-gigabyte file being transported/routed by NiFi to something like HDFS with minimal inspection or modification to the source data. In such scenarios, there is little value in introducing the footprint of this content into the NiFi repository itself for sheer routing decisions. What is prescribed is a means of providing an extended pass by reference to the source of the data itself avoiding duplication of data and, possibly, IO unless it is needed. This approach would deprecate/alter the mechanism by which the List/Fetch, Get and related source processors behave. Effectively, one could locate a series of files that are to be delivered to some consumer, performing the intermediary routing and then streaming the content to its destination(s) as needed without introducing a duplicate copy into NiFi's configured content repository. This would be an opt-in and configurable mechanism for those dataflow paths that deal with simple movement of large files while still benefitting from many of NiFi's core values like provenance and event level processing.

| # | Title | User Story | Importance | Notes |
|---|---|---|---|---|
| 1 | Transparency of External File Approach | Users need to be able to manage external files in flow in a homogeneous manner with "classic" FlowFiles/content |
| |
| 2 | Extensible to support varied protocols | The largest files where simple replication and transport occurs could include varied sources such as local file, HDFS, S3, and SFTP. |
Below is a list of questions to be addressed as a result of this requirements document:
| Question | Outcome |
|---|---|
| If a content is to be delivered to multiple endpoints, and we can determine this, are there optimizations available to avoid the issues of | |
| How do we know when/handle changes to an external file? | Communicate the decision reached |
| How are reads handled (something like ExtractText)? Does this content then get introduced into a NiFi content repository at this time? | |
| Can we apply our offset & length mechanism for splittling parts of a component (SplitText)? | |
| What, if any, are the commonalities of this with the ideas of the High Availability Processing? |