I don’t have much more to share beyond what @tg44 has already mentioned. If the types of your records are known ahead of time then building a typesafe static graph and running it based on information only available at runtime should be achievable. I would imagine using the Graph DSL might be more intuitive while building the graph because you can use simple binary operators to build out that complexity, but you could probably do it with the operator API as well. Assuming your blueprint doesn’t change dynamically at runtime then you could construct the graph and run it without a problem.
As you may already know, the dynamic stream operators (MergeHub, BroadcastHub, etc.) are useful when your consumer and producers themselves aren’t known until runtime. A classic example would be implementing a daemon of some kind where you want clients to be able to join, catch up, and depart without unnecessary stream materializations per client connection, or stream shutdowns/cancellations when clients disconnect. They also provide a way of merging these transient producers (or consumers) together.