I'm considering Kafka as one of several technologies to serve as a message broker for worker nodes that will eventually send push notifications to users. An important constraint is that I don't want one tenant to monopolize resources such that it inserts a million notification messages and prevents other tenants from receiving their notifications in a reasonable time. In other words I want to each tenant to have their messages processed at about the same rate. My options seem to be either create a topic for each tenant or a partition for each tenant. Both seem problematic and/or frowned upon.
Creating a topic for each tenant seems like a logistical nightmare. Every time a new tenant gets added to the application the consumers would somehow have to be notified to subscribe to the topic.
Creating a partition for each tenant doesn't seem quite as bad but seems like it is frowned upon. However, based on my understanding of how load is distributed between partitions and consumers, if multiple tenants shared the same partition there is a possibility that one tenants messages will get stuck behind another's which is not how I want to balance the load.
What is my best option? Is there a third possibility I'm not considering? Is Kafka not the right tool for the job?
Thanks!