The balance of the load between independent container processes or between multi-threaded concurrent operators is the responsibility of the upstream application feeding those processes or threads, and of any filtering that is done immediately after the input streams. No implicit (i.e. server managed) load balancing is performed.
Splitting the application input among multiple containers is an effective way to take advantage of additional cores:
- If the upstream application is itself a StreamBase application, then a filter can distribute the output among multiple output streams. Alternatively, each subscriber can use a disjoint predicate expression.
- If upstream is an adapter to an external data-provider, then the adapter can be duplicated and each instance given a disjoint subscription list to distribute the load.