Summary
Attributes travel with a FlowFile as it moves through a flow, but different processors handle attributes differently. Some preserve them, some modify them, and some create new FlowFiles with only a subset of attributes. Understanding attribute propagation is essential for debugging and designing reliable flows.
The default behavior: attributes move with the FlowFile
When a processor receives a FlowFile and routes it forward, the FlowFile’s attributes move forward unchanged unless the processor explicitly adds, updates, or removes them.
In most flows:
Routing decisions rely entirely on attributes
Attributes accumulate as the FlowFile progresses
Downstream processors expect attributes to exist
If an attribute disappears or changes unexpectedly, something in the middle modified it.
Processors that add attributes
Many processors add metadata automatically, such as:
InvokeHTTP→ status codes, timing, MIME typeExtractAttributes→ extracted fieldsHashContent→ hash attributesExtractText→ regex match outputListFile→ file metadata
These become part of the FlowFile and travel with it.
Processors that modify or replace attributes
Some processors will overwrite attributes or rewrite internal metadata:
UpdateAttribute(you control what changes)ListFilemay replace certain file-related attributesRecord processors may add new metadata like record counts
Certain API processors overwrite
mime.typeor similar fields
Small changes here often cause unexpected routing downstream.
Processors that create new FlowFiles with different attributes
Not every processor “passes through” the original FlowFile.
Some generate brand new FlowFiles, and attribute behavior differs.
Split processors
Examples: SplitJson, SplitRecord, SplitContent
Each output FlowFile inherits the original attributes
Some processors add split-specific attributes (fragment counts, indexes)
Merge processors
Examples: MergeContent, MergeRecord
Output FlowFile may:
Keep selected attributes
Drop conflicting attributes
Add merge metadata
Child attributes often supersede or override one another depending on processor settings
Generate processors
Examples: GenerateFlowFile
Output FlowFiles start with only the attributes the processor defines
Nothing is inherited
Processors that intentionally drop attributes
Some processors create system-generated FlowFiles, discarding original attributes entirely.
Examples:
ExecuteScripton certain routesSome error-handling branches
Certain transformations that emit new content as a new FlowFile
If attributes suddenly vanish, check whether the processor created a new FlowFile instead of forwarding the original.
Attribute propagation across relationships
Attributes move independently down each relationship.
Example:RouteOnAttribute splits a FlowFile onto two paths:
Each new FlowFile gets the same attributes as the original
Additional route-specific attributes may be added (e.g., matched rule name)
Each branch evolves separately after that point.
How processors use attributes to build outgoing content
Record processors, transformation processors, and templating processors may read attributes to construct:
File paths
API request URLs
SQL queries
Routing keys
Output filenames
Attributes don’t just travel — they directly shape what downstream processors do.
Why this matters for debugging
When a FlowFile doesn’t behave as expected:
Check the attributes before and after a processor in Provenance
Look for overwritten, missing, or transformed values
Identify whether a processor created a new FlowFile
90 percent of “wrong route” or “invalid processor” issues come from attribute changes.
Quick rules to remember
Attributes move with a FlowFile unless a processor replaces the FlowFile.
Splits inherit attributes; merges may drop or remap them.
Many processors add attributes automatically; learn the common ones.
Debugging always starts with inspecting attribute history in provenance.
Related Articles
FlowFile Content vs Attributes
Attribute Evaluation and Expression Language Basics
Best Practices for Attributes
Common Attribute Patterns
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article