Kafka Streams - Processor API - Forward to different topics
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Kafka Streams is a client library for building applications and microservices, where the input and output data are stored in Kafka topics. Kafka Streams combines the simplicity of writing and deploying standard Java and Scala applications on the client side with the benefits of Kafka's server-side cluster technology.
The Processor API is one of the two main APIs provided by Kafka Streams, the other being the Stream DSL. The Processor API is lower-level than the Stream DSL and allows for more flexible processing by giving developers access to the streams' topology. This can be particularly useful when you need to perform operations that are not supported directly in the DSL.
Understanding The Processor API
The Processor API lets you define and connect processors (nodes in the processing topology) explicitly. Each processor node is a processing step that can read from one or more Kafka topics (via its incoming edges) and can forward processed records to its downstream processors (via its outgoing edges) or directly to external topics.
Key Components
The primary components of the Processor API are:
- Processor: Interface representing a processing step.
- Topology: Class representing the set of all processing steps.
- ProcessorContext: Interface providing access to the metadata, scheduling, and forwarding.
Forwarding to Different Topics
A common task in Kafka Streams is to decide at runtime which topic a record should be forwarded to. This can be based on the content of the message, the time of day, or any other business logic.
Example Code
Here's a basic example to demonstrate how a Processor might use the forward() method to dynamically route messages to different output topics:
In the example above, records that contain the string "error" in the message body are forwarded to a child node named "error-output", while all other records go to "standard-output". These child nodes could be other processors or directly connected to specific Kafka topics.
Configuring the Topology
Connecting processors and topics is done in the topology setup:
Considerations
| Aspect | Consideration | Details |
| Data Timing | Processing Latency | Ensure real-time processing requirements are met. |
| Routing Logic | Complexity of Routing Decisions | Maintainability can become difficult with complex logic. |
| Error Handling | Robustness Against Processing Errors | Care must be taken to handle errors in the processing logic itself. |
| Scalability | Topic and Partition Scaling | Ensure that topics are appropriately partitioned to handle the load. |
Additional Subtopics
Monitoring and Managing Performance
Efficiently forwarding messages to different topics can lead to a diverse setup which need active monitoring to ensure optimal performance and to diagnose issues early.
Use with Global KTables
Combining processor API operations with global KTables can enrich the messages dynamically based on data from a table.
Testing Strategies
Develop robust unit and integration testing strategies to ensure the processors perform as expected and handle edge cases gracefully.
By deeply understanding the capabilities and configurations of Kafka Streams' Processor API, developers can design highly flexible and powerful streaming applications tailored precisely to their business needs.
Related reading
- Kafka Streams - Processor context commit
- Kafka Streams - reusing streams using through() vs toStream() + to()
- Kafka Streams - Send on different topics depending on Streams Data
- Kafka Streams - SerializationException Unknown magic byte
- Kafka Streams processor API context.forward
- kafka upgrade to .9 with new consumer api
- Kafka Streams - updating aggregations on KTable
- Kafka Streams - what is stored in memory and disk in Streams App

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.