It manages producers and consumers to be added and removed freely.
When a new producer is added, the existing consumers will start to receive data from the producer. When a new consumer is added, all previoulsy added producers will start writing to the new consumer.
Contexts are used to manage the lifecycle of the consumer. Cancelling the consumer’s context will indicated to the producers to drain (and stop any reconnect logic). Once each producer exits, the given channel is closed. Contexts were chosen due to their tight integration with gRPC.