Everything related to Stream Processing is currently more or less well structured in the sense that it is clear which components exist, what their responsibilities are, how they interact and what the main mechanisms are. Yes, there are problmens but they are not "structural". However, everything besides Stream Processing is chaos. We need to bring some order and structure here -
- Which kinds of interactions exist besides Stream Processing? Which facilities do we have to address them?
- Which components are inside the broker and what are their main responsibilites? How can they interact?
- Hat state is there and how is it managed?
- Where are certain "aspects" of the client api protocol managed? For instance, if a request for which a broker is currently not leader is received it needs to be rejected. Currently this works differently for commands vs. control messages. This should probably be unified.
- How does the client discover the cluster?
- How does the client know to which node to send a request?
- How are partition-aware subscriptions managed?
- Lifecycle of a "request" from the client perspective pobably needs a more expressive state machine since it can be multiple requests to different brokers.
- Which decisions / interactions require a central entity? So far, we have
- Deployments of workflows
- Topic Management.