Sources
Source nodes ingest data into your pipeline from external systems. Every source has a single output port.Kafka Consumer
Consumes records from one or more partitions of a Kafka topic.
Output: One record per Kafka message, with its schema inferred or fetched from Schema Registry.
CSV Source
Reads records from a local CSV file — useful for development, testing, and seeding reference data.
Output: One record per CSV row, with field names taken from the header (or positional indices if
skipHeader is false).
CSV Source is primarily intended for local development and testing. For production ingestion, prefer Kafka Consumer or a dedicated connector.
JDBC Source
Polls rows from a relational database table and ingests them into the pipeline using the JDBC Source Connector.
Output: One record per row returned by the connector, with schema fetched from the table or configured in the editor.
Generic Connect Source
Uses any Kafka Connect source connector to ingest data from external systems.
Output: One record per message emitted by the connector, with schema inferred or configured in the editor.
The Generic Connect Source lets you use any Kafka Connect source connector. Place the connector JAR in the
libs/ directory and configure it here.
Processors
Processor nodes transform, route, filter, or enrich data as it flows through the pipeline. Each processor has at least one input and one output port.Transform
Transforms records using JSONata expressions.
Input: Any record
Output: Transformed record based on the JSONata expression
The Transform node is the workhorse of most pipelines. Use it to:
- Map between schemas
- Reshape data structures
- Compute derived fields
- Filter out unwanted fields
- Combine multiple fields
JSONata examples
JSONata examples
Rename fields:Flatten nested objects:Conditional logic:Aggregate arrays:
Branch
Routes records to different outputs based on conditions.
Each branch contains:
id— Unique identifierlabel— Display namecondition— JSONata expression that returnstrueorfalse
default output
Records are evaluated against each condition in order. The first matching condition routes the record to that branch’s output. Records that match no condition go to default.
Merge
Combines multiple parallel input streams into a single output stream (fan-in).
Inputs: Multiple inputs —
input-0 through input-(n-1)
Output: One merged stream on output
Input 0 defines the schema for all inputs and the output. Connect the primary stream to input 0; additional inputs must match that schema.
Use Merge after a Branch node to reunite split streams, or to combine records from independent sources that share the same schema.
Explode
Expands an array field into individual records (a flatMap operation).
Input: Record containing an array field
Output: One record per array element, with the array replaced by its individual items
Use Explode when you need to process array elements individually. For example, if an order contains multiple line items, Explode creates a separate record for each item.
Before / after example
Before / after example
Before — one record:After — two records:
Lookup
Enriches records by joining with cached reference data (stream-table join).
Inputs:
- input (left) — Main data stream
- reference (top) — Reference data, cached in memory
- output — Enriched records
- reject — Records with no match (only when behavior is
REJECT)
cacheKey. For each incoming record, lookupKey is evaluated and matched against the cache.
Choose
CONTINUE if missing reference data is acceptable — the lookup field will be null. Choose REJECT to route unmatched records to a separate output for error handling or dead-letter queues.JDBC Request-Reply
Enriches each record by executing a parameterized SQL query against a relational database.
Input: Any record
Outputs:
- output — Record enriched with the query result in
fieldName - reject — Records where the query returned no rows (only when behavior is
REJECT)
Peek
Observes records without modifying them — useful for debugging and monitoring.
Input: Any record
Output: Same record, unmodified
Use Peek to:
- Debug pipeline behavior during development
- Log records at specific points in the pipeline
- Inspect data shapes between processing steps
Data Masking
Masks sensitive fields in each record’s value — redaction, nulling, numeric jitter, or synthetic replacement via Datafaker expressions.
Input: Any record with a JSON object
value
Output: Same record shape with masked fields applied; if there are no rules, or the value is missing, the record passes through unchanged.
Field paths use dot notation for nested structs. Append [] to a segment to apply the rule to every element of an array at that path (for example, items[].email masks email inside each item).
mask values are matched case-insensitively at runtime.
Unknown
mask values are logged and the field is left unchanged. VARIANCE on non-numeric fields is skipped with a warning.Transform SMT
Applies a Kafka Connect Single Message Transform (SMT) to reshape records in flight.
Input: Any record
Output: Record transformed by the configured SMT
Use Transform SMT when you need standard Kafka Connect transforms — such as
ExtractField, ReplaceField, or Cast — without writing custom code. Configure both input and output schemas in the editor so downstream nodes can validate the result.
Code Transform
Transforms records using Python or JavaScript code.
Input: Any record
Output: Transformed record based on the code
Each record is passed to your code as
input (the record value). The last expression or assigned output variable becomes the transformed value. Use the built-in code editor to write, test, and debug transforms with sample data.
Configure input and output schemas in the editor. The output schema defines the shape downstream nodes expect.
Sinks
Sink nodes write data from your pipeline to external systems. Every sink has a single input port and no outputs (terminal nodes).Kafka Producer
Produces records to a Kafka topic.
Input: Any record
Output: None (terminal node)
JDBC Sink
Writes records to a relational database table.
Input: Any record (fields must match table columns)
Output: None (terminal node)
The JDBC Sink maps record fields to table columns by name. Ensure your upstream transformation produces a schema compatible with the target table.
Generic Connect Sink
Uses any Kafka Connect sink connector for output.
Input: Any record
Output: None (terminal node)
The Generic Connect Sink lets you use any Kafka Connect sink connector. Place the connector JAR in the
libs/ directory and configure it here.
Utility
Utility nodes help organize and document your pipeline but do not affect data processing.Comment
Adds a text annotation to the pipeline canvas.
Comment nodes are visual-only — they have no ports and are ignored at runtime. Use them to:
- Document the purpose of a pipeline section
- Leave notes for teammates
- Mark areas that need future work
Comments are saved as part of the pipeline definition but have no effect on execution.
Next Steps
Transformations
Learn JSONata syntax and best practices
Configuration
Configure Kafka clusters, databases, and more
Interactive Testing
Test your pipeline with stubbed sources and sinks
Core Concepts
Understand schemas, ports, and data flow